Skip to content

PJUllrich/curl_req

This branch is 1 commit ahead of, 3 commits behind derekkraan/curl_req:main.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Mar 6, 2025
eea6f07 Β· Mar 6, 2025
Dec 23, 2024
Jan 27, 2025
Jan 13, 2025
Mar 6, 2025
Jan 27, 2025
May 28, 2024
Dec 4, 2024
Jan 14, 2025
Feb 10, 2025
May 30, 2024
Jan 14, 2025
Dec 4, 2024
Nov 28, 2024
Jan 10, 2025
Jan 27, 2025

Repository files navigation

πŸ₯Œ CurlReq

πŸ₯Œ πŸ₯Œ πŸ₯Œ πŸ₯Œ πŸ₯Œ πŸ₯Œ

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)

Long Short Limitation
--header -H
--request -X
--data -d No file interpolation with @
--data_raw No file interpolation with @
--data_ascii No file interpolation with @
--cookie -b
--head -I
--form -F
--location -L
--user -u Only as basic auth
--compressed
--proxy -x
--proxy_user -U Only 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.

Long Short
--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!

Releases

No releases published

Packages

No packages published

Languages

  • Elixir 99.8%
  • Just 0.2%