🥌 CurlReq

View Source

🥌 🥌 🥌 🥌 🥌 🥌

Req is awesome, but the world speaks curl.

Next time you're debugging a 3rd party API and need to ask for support, you can just toss in this line:

|> CurlReq.inspect()

And you'll have the full curl command.

Read the announcement here.

Usage

Req to Curl

# Turn a Req request into a `curl` command.

iex> Req.new(url: "/fact", base_url: "https://example.com/")
...> |> CurlReq.to_curl()
"curl --compressed -X GET https://example.com/fact"

# Or use `CurlReq.inspect/2` to inspect inline.

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

Curl to Req

CurlReq also implements the ~CURL sigil, which converts a curl command to its corresponding Req request.

iex> import CurlReq
...> ~CURL(curl https://www.example.com)
...> # |> Req.request!()

or use CurlReq.from_curl/1:

iex> CurlReq.from_curl("curl https://example.com")
...> # |> Req.request!()

Req Plugin

One final feature to note the Req plugin, CurlReq.Plugin. Use CurlReq.Plugin.attach/2 to set up curl logging (inspired by TeslaCurl).

iex> Req.new(url: "/fact", base_url: "https://example.com/")
...> |> CurlReq.Plugin.attach()
...> # |> Req.request!()

Supported Features

CurlReq parses a bunch of cURL flags and translates them to Req.Request structs and vice versa. To get an up to date list you can call CurlReq.Curl.flags/0

Supported Flags

The following flags are supported in all directions (from Req, from cURL, to Req, to cURL)

LongShortLimitation
--header-H
--request-X
--data-dNo file interpolation with @
--data_rawNo file interpolation with @
--data_asciiNo file interpolation with @
--cookie-b
--head-I
--form-F
--location-L
--user-uOnly as basic auth
--compressed
--proxy-x
--proxy_user-UOnly as basic auth
--netrc-n
--netrc_file
--insecure-k
--user_agent-A

Ignored flags

The following flags are currently ignored because they mostly describe the runtime behaviour and not the request itself.

LongShort
--verbose-v
--output-o
--remote_name-O
--show-error-S
--silent-s
--fail-f

Installation

The package can be installed by adding curl_req to your list of dependencies in mix.exs:

def deps do
  [
    {:curl_req, "~> 0.100.0"}
  ]
end

The docs can be found at https://hexdocs.pm/curl_req.

Contributions

Contributions are welcome! There are gaps in the library, and this is open source, so let's work together to fill them!

How to contribute

  • Clone the repository to your computer.
  • Add to your mix.exs file in your project: {:curl_req, path: "~/path/to/curl_req"}.
  • Tinker until it does what you want.
  • Add a test covering your case.
  • Add a changelog entry if applicable.
  • Submit a PR!