CurlReq (CurlReq v0.100.1)

View Source

Summary

Functions

Transforms a curl command into a Req request.

Inspect a Req struct in curl syntax.

Same as from_curl/1 but as a sigil. The benefit here is, that the Req.Request struct will be created at compile time and you don't need to escape the string. Remember to

Transforms a Req request into a curl command.

Types

flags()

@type flags() :: :short | :long

flavor()

@type flavor() :: :curl | :req

inspect_opt()

@type inspect_opt() :: {:label, String.t()}

to_curl_opts()

@type to_curl_opts() :: [
  flags: flags(),
  flavor: flavor(),
  flavour: flavor(),
  run_steps: boolean() | [{:only, [atom()]}] | [{:except, [atom()]}]
]

Functions

from_curl(curl_command)

(since 0.98.4)
@spec from_curl(String.t()) :: Req.Request.t()

Transforms a curl command into a Req request.

The following flags are supported:

  • --header/-H
  • --request/-X
  • --data/-d
  • --data_raw
  • --data_ascii
  • --cookie/-b
  • --head/-I
  • --form/-F
  • --location/-L
  • --user/-u
  • --compressed
  • --proxy/-x
  • --proxy_user/-U
  • --netrc/-n
  • --netrc_file
  • --insecure/-k
  • --user_agent/-A
  • --fail/-f
  • --silent/-s
  • --show_error/-S
  • --output/-o
  • --remote_name/-O
  • --verbose/-v
  • --http1.0/-0
  • --http1.1
  • --http2
  • --http2_prior_knowledge

The curl command prefix is optional

Info

Only string inputs are supported. That means for example -d @data.txt will not load the file or -d @- will not read from stdin

Examples

iex> req = CurlReq.from_curl("curl https://www.example.com")
iex> req.method
:get
iex> req.url
URI.parse("https://www.example.com")

iex> req = CurlReq.from_curl("curl -I https://example.com")
iex> req.method
:head
iex> req.url
URI.parse("https://example.com")

iex> req = CurlReq.from_curl("curl -b cookie_key=cookie_val https://example.com")
iex> req.method
:get
iex> Req.Request.get_header(req, "cookie")
["cookie_key=cookie_val"]

inspect(req, opts \\ [])

@spec inspect(Req.Request.t(), [inspect_opt()]) :: Req.Request.t()

Inspect a Req struct in curl syntax.

Returns the unchanged req, just like IO.inspect/2.

Examples

Req.new(url: "https://example.com")
|> CurlReq.inspect()
|> Req.request!()
#=> curl --compressed -X GET https://example.com

sigil_CURL(curl_command, modifiers)

(macro)

Same as from_curl/1 but as a sigil. The benefit here is, that the Req.Request struct will be created at compile time and you don't need to escape the string. Remember to

require CurlReq

to use the custom sigil.

Examples

iex> req = ~CURL(curl "https://www.example.com")
iex> req.method
:get
iex> req.url
URI.parse("https://www.example.com")

iex> req = ~CURL(curl -I "https://example.com")
iex> req.method
:head
iex> req.url
URI.parse("https://example.com")

iex> req = ~CURL(curl -b "cookie_key=cookie_val" "https://example.com")
iex> req.method
:get
iex> Req.Request.get_header(req, "cookie")
["cookie_key=cookie_val"]

to_curl(req, options \\ [])

@spec to_curl(Req.Request.t(), to_curl_opts()) :: String.t()

Transforms a Req request into a curl command.

The following flags are supported:

  • --header/-H
  • --request/-X
  • --data/-d
  • --data_raw
  • --data_ascii
  • --cookie/-b
  • --head/-I
  • --form/-F
  • --location/-L
  • --user/-u
  • --compressed
  • --proxy/-x
  • --proxy_user/-U
  • --netrc/-n
  • --netrc_file
  • --insecure/-k
  • --user_agent/-A
  • --fail/-f
  • --silent/-s
  • --show_error/-S
  • --output/-o
  • --remote_name/-O
  • --verbose/-v
  • --http1.0/-0
  • --http1.1
  • --http2
  • --http2_prior_knowledge

Options:

  • run_steps: Run the Req.Steps before generating the curl command to have fine-tuned control over the Req.Request. Default: true.
    • true: Run all steps
    • false: Run no steps
    • only: [atom()]: A list of step names as atoms and only they will be executed
    • except: [atom()]: A list of step names as atoms and these steps will be excluded from the executed steps
  • flags: Specify the style the argument flags are constructed. Can either be :short or :long, Default: :short
  • flavor or flavour: With the :curl flavor (the default) it will try to use native curl representations for compression, auth and will use the native user agent. If flavor is set to :req the headers will not be modified and the curl command is constructed to stay as true as possible to the original Req.Request

Examples

iex> Req.new(url: URI.parse("https://www.example.com"))
...> |> CurlReq.to_curl()
~S(curl --compressed -X GET https://www.example.com)

iex> Req.new(url: URI.parse("https://www.example.com"))
...> |> CurlReq.to_curl(flags: :long, flavor: :req)
~S(curl --header "accept-encoding: gzip" --user-agent "req/0.5.8" --request GET https://www.example.com)

iex> Req.new(url: "https://www.example.com")
...> |> CurlReq.to_curl(run_steps: [except: [:compressed]])
~S(curl -X GET https://www.example.com)