View Source CurlReq (CurlReq v0.100.0)

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

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> CurlReq.from_curl("curl https://www.example.com")
%Req.Request{method: :get, url: URI.parse("https://www.example.com")}

iex> CurlReq.from_curl("curl -I https://example.com")
%Req.Request{method: :head, url: URI.parse("https://example.com")}

iex> CurlReq.from_curl("curl -b cookie_key=cookie_val https://example.com")
%Req.Request{method: :get, headers: %{"cookie" => ["cookie_key=cookie_val"]}, url: URI.parse("https://example.com")}

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

import CurlReq

to use the custom sigil.

Examples

iex> ~CURL(curl "https://www.example.com")
%Req.Request{method: :get, url: URI.parse("https://www.example.com")}

iex> ~CURL(curl -I "https://example.com")
%Req.Request{method: :head, url: URI.parse("https://example.com")}

iex> ~CURL(curl -b "cookie_key=cookie_val" "https://example.com")
%Req.Request{method: :get, headers: %{"cookie" => ["cookie_key=cookie_val"]}, url: URI.parse("https://example.com")}

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

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)