An open API service indexing awesome lists of open source software.

https://github.com/trinhminhtriet/curli

🌀 Curli: A user-friendly curl interface combining HTTPie’s simplicity with curl’s full functionality and power.
https://github.com/trinhminhtriet/curli

cli curl developer-tools http-client httpie

Last synced: 3 months ago
JSON representation

🌀 Curli: A user-friendly curl interface combining HTTPie’s simplicity with curl’s full functionality and power.

Awesome Lists containing this project

README

        

# Curli 🌀

```text

_ _
___ _ _ _ __ | |(_)
/ __|| | | || '__|| || |
| (__ | |_| || | | || |
\___| \__,_||_| |_||_|

```

**Curli** is a lightweight, user-friendly interface for `curl`, blending the simplicity of **HTTPie** with the robust functionality of **curl**. With Curli, you can leverage all the power of `curl` commands, enhanced with syntax sugar and formatted output inspired by HTTPie. Perfect for developers who want the best of both worlds — quick, readable commands without sacrificing advanced options.

## ✨ Features

- All `curl` options, with added usability enhancements
- Clean, readable output for easy debugging
- Supports complex requests with simplified syntax

## 🚀 Installation

Download a [binary package](https://github.com/trinhminhtriet/curli/releases)

### Build with goreleaser

Build with [goreleaser](https://goreleaser.com) to test that all platforms compile properly.

```sh
goreleaser build --clean --snapshot
```

Or for your current platform only.

```sh
goreleaser build --clean --snapshot --single-target
```

### Build Docker image

```sh
docker build -t trinhminhtriet/curli .
```

## đź’ˇ Usage

### Docker

```sh
docker run --rm -it trinhminhtriet/curli [CURL_OPTIONS...] [METHOD] URL [ITEM [ITEM]]

docker run --rm -it trinhminhtriet/curli version
docker run --rm -it trinhminhtriet/curli -I https://github.com
```

```sh
Synopsis:

$ curli [CURL_OPTIONS...] [METHOD] URL [ITEM [ITEM]]
Usage: curli [options...] [METHOD] URL [REQUEST_ITEM [REQUEST_ITEM ...]]
--abstract-unix-socket Connect via abstract Unix domain socket
--alt-svc Enable alt-svc with this cache file
--anyauth Pick any authentication method
-a, --append Append to target file when uploading
--aws-sigv4 AWS V4 signature auth
--basic HTTP Basic Authentication
--ca-native Load CA certs from the OS
--cacert CA certificate to verify peer against
--capath CA directory to verify peer against
-E, --cert Client certificate file and password
--cert-status Verify server cert status OCSP-staple
--cert-type Certificate type (DER/PEM/ENG/P12)
--ciphers SSL ciphers to use
--compressed Request compressed response
--compressed-ssh Enable SSH compression
-K, --config Read config from a file
--connect-timeout Maximum time allowed to connect
--connect-to Connect to host
-C, --continue-at Resumed transfer offset
-b, --cookie Send cookies from string/load from file
-c, --cookie-jar Save cookies to after operation
--create-dirs Create necessary local directory hierarchy
--create-file-mode File mode for created files
--crlf Convert LF to CRLF in upload
--crlfile Certificate Revocation list
--curves (EC) TLS key exchange algorithms to request
-d, --data HTTP POST data
--data-ascii HTTP POST ASCII data
--data-binary HTTP POST binary data
--data-raw HTTP POST data, '@' allowed
--data-urlencode HTTP POST data URL encoded
--delegation GSS-API delegation permission
--digest HTTP Digest Authentication
-q, --disable Disable .curlrc
--disable-eprt Inhibit using EPRT or LPRT
--disable-epsv Inhibit using EPSV
--disallow-username-in-url Disallow username in URL
--dns-interface Interface to use for DNS requests
--dns-ipv4-addr

IPv4 address to use for DNS requests
--dns-ipv6-addr
IPv6 address to use for DNS requests
--dns-servers DNS server addrs to use
--doh-cert-status Verify DoH server cert status OCSP-staple
--doh-insecure Allow insecure DoH server connections
--doh-url Resolve hostnames over DoH
-D, --dump-header Write the received headers to
--egd-file EGD socket path for random data
--engine Crypto engine to use
--etag-compare Load ETag from file
--etag-save Parse incoming ETag and save to a file
--expect100-timeout How long to wait for 100-continue
-f, --fail Fail fast with no output on HTTP errors
--fail-early Fail on first transfer error
--fail-with-body Fail on HTTP errors but save the body
--false-start Enable TLS False Start
-F, --form Specify multipart MIME data
--form-escape Escape form fields using backslash
--form-string Specify multipart MIME data
--ftp-account Account data string
--ftp-alternative-to-user String to replace USER [name]
--ftp-create-dirs Create the remote dirs if not present
--ftp-method Control CWD usage
--ftp-pasv Send PASV/EPSV instead of PORT
-P, --ftp-port
Send PORT instead of PASV
--ftp-pret Send PRET before PASV
--ftp-skip-pasv-ip Skip the IP address for PASV
--ftp-ssl-ccc Send CCC after authenticating
--ftp-ssl-ccc-mode Set CCC mode
--ftp-ssl-control Require TLS for login, clear for transfer
-G, --get Put the post data in the URL and use GET
-g, --globoff Disable URL globbing with {} and []
--happy-eyeballs-timeout-ms Time for IPv6 before IPv4
--haproxy-clientip Set address in HAProxy PROXY
--haproxy-protocol Send HAProxy PROXY protocol v1 header
-I, --head Show document info only
-H, --header Pass custom header(s) to server
-h, --help Get help for commands
--hostpubmd5 Acceptable MD5 hash of host public key
--hostpubsha256 Acceptable SHA256 hash of host public key
--hsts Enable HSTS with this cache file
--http0.9 Allow HTTP 0.9 responses
-0, --http1.0 Use HTTP 1.0
--http1.1 Use HTTP 1.1
--http2 Use HTTP/2
--http2-prior-knowledge Use HTTP 2 without HTTP/1.1 Upgrade
--http3 Use HTTP v3
--http3-only Use HTTP v3 only
--ignore-content-length Ignore the size of the remote resource
-i, --include Include response headers in output
-k, --insecure Allow insecure server connections
--interface Use network INTERFACE (or address)
--ipfs-gateway Gateway for IPFS
-4, --ipv4 Resolve names to IPv4 addresses
-6, --ipv6 Resolve names to IPv6 addresses
--json HTTP POST JSON
-j, --junk-session-cookies Ignore session cookies read from file
--keepalive-time Interval time for keepalive probes
--key Private key filename
--key-type Private key file type (DER/PEM/ENG)
--krb Enable Kerberos with security
--libcurl Generate libcurl code for this command line
--limit-rate Limit transfer speed to RATE
-l, --list-only List only mode
--local-port Use a local port number within RANGE
-L, --location Follow redirects
--location-trusted Like --location, but send auth to other hosts
--login-options Server login options
--mail-auth
Originator address of the original email
--mail-from
Mail from this address
--mail-rcpt
Mail to this address
--mail-rcpt-allowfails Allow RCPT TO command to fail
-M, --manual Display the full manual
--max-filesize Maximum file size to download
--max-redirs Maximum number of redirects allowed
-m, --max-time Maximum time allowed for transfer
--metalink Process given URLs as metalink XML file
--negotiate Use HTTP Negotiate (SPNEGO) authentication
-n, --netrc Must read .netrc for username and password
--netrc-file Specify FILE for netrc
--netrc-optional Use either .netrc or URL
-:, --next Make next URL use its separate set of options
--no-alpn Disable the ALPN TLS extension
-N, --no-buffer Disable buffering of the output stream
--no-clobber Do not overwrite files that already exist
--no-keepalive Disable TCP keepalive on the connection
--no-npn Disable the NPN TLS extension
--no-progress-meter Do not show the progress meter
--no-sessionid Disable SSL session-ID reusing
--noproxy List of hosts which do not use proxy
--ntlm HTTP NTLM authentication
--ntlm-wb HTTP NTLM authentication with winbind
--oauth2-bearer OAuth 2 Bearer Token
-o, --output Write to file instead of stdout
--output-dir Directory to save files in
-Z, --parallel Perform transfers in parallel
--parallel-immediate Do not wait for multiplexing (with --parallel)
--parallel-max Maximum concurrency for parallel transfers
--pass Pass phrase for the private key
--path-as-is Do not squash .. sequences in URL path
--pinnedpubkey FILE/HASHES Public key to verify peer against
--post301 Do not switch to GET after a 301 redirect
--post302 Do not switch to GET after a 302 redirect
--post303 Do not switch to GET after a 303 redirect
--preproxy [protocol://]host[:port] Use this proxy first
-#, --progress-bar Display transfer progress as a bar
--proto Enable/disable PROTOCOLS
--proto-default Use PROTOCOL for any URL missing a scheme
--proto-redir Enable/disable PROTOCOLS on redirect
-x, --proxy [protocol://]host[:port] Use this proxy
--proxy-anyauth Pick any proxy authentication method
--proxy-basic Use Basic authentication on the proxy
--proxy-ca-native Load CA certs from the OS to verify proxy
--proxy-cacert CA certificates to verify proxy against
--proxy-capath CA directory to verify proxy against
--proxy-cert Set client certificate for proxy
--proxy-cert-type Client certificate type for HTTPS proxy
--proxy-ciphers SSL ciphers to use for proxy
--proxy-crlfile Set a CRL list for proxy
--proxy-digest Digest auth with the proxy
--proxy-header Pass custom header(s) to proxy
--proxy-http2 Use HTTP/2 with HTTPS proxy
--proxy-insecure Skip HTTPS proxy cert verification
--proxy-key Private key for HTTPS proxy
--proxy-key-type Private key file type for proxy
--proxy-negotiate HTTP Negotiate (SPNEGO) auth with the proxy
--proxy-ntlm NTLM authentication with the proxy
--proxy-pass Pass phrase for the private key for HTTPS proxy
--proxy-pinnedpubkey FILE/HASHES public key to verify proxy with
--proxy-service-name SPNEGO proxy service name
--proxy-ssl-allow-beast Allow security flaw for interop for HTTPS proxy
--proxy-ssl-auto-client-cert Auto client certificate for proxy
--proxy-tls13-ciphers TLS 1.3 proxy cipher suites
--proxy-tlsauthtype TLS authentication type for HTTPS proxy
--proxy-tlspassword TLS password for HTTPS proxy
--proxy-tlsuser TLS username for HTTPS proxy
--proxy-tlsv1 TLSv1 for HTTPS proxy
-U, --proxy-user Proxy user and password
--proxy1.0 Use HTTP/1.0 proxy on given port
-p, --proxytunnel HTTP proxy tunnel (using CONNECT)
--pubkey SSH Public key filename
-Q, --quote Send command(s) to server before transfer
--random-file File for reading random data from
-r, --range Retrieve only the bytes within RANGE
--rate Request rate for serial transfers
--raw Do HTTP raw; no transfer decoding
-e, --referer Referrer URL
-J, --remote-header-name Use the header-provided filename
-O, --remote-name Write output to file named as remote file
--remote-name-all Use the remote filename for all URLs
-R, --remote-time Set remote file's time on local output
--remove-on-error Remove output file on errors
-X, --request Specify request method to use
--request-target Specify the target for this request
--resolve <[+]host:port:addr[,addr]...> Resolve host+port to address
--retry Retry request if transient problems occur
--retry-all-errors Retry all errors (with --retry)
--retry-connrefused Retry on connection refused (with --retry)
--retry-delay Wait time between retries
--retry-max-time Retry only within this period
--sasl-authzid Identity for SASL PLAIN authentication
--sasl-ir Initial response in SASL authentication
--service-name SPNEGO service name
-S, --show-error Show error even when -s is used
-s, --silent Silent mode
--socks4 SOCKS4 proxy on given host + port
--socks4a SOCKS4a proxy on given host + port
--socks5 SOCKS5 proxy on given host + port
--socks5-basic Username/password auth for SOCKS5 proxies
--socks5-gssapi Enable GSS-API auth for SOCKS5 proxies
--socks5-gssapi-nec Compatibility with NEC SOCKS5 server
--socks5-gssapi-service SOCKS5 proxy service name for GSS-API
--socks5-hostname SOCKS5 proxy, pass hostname to proxy
-Y, --speed-limit Stop transfers slower than this
-y, --speed-time Trigger 'speed-limit' abort after this time
--ssl Try enabling TLS
--ssl-allow-beast Allow security flaw to improve interop
--ssl-auto-client-cert Use auto client certificate (Schannel)
--ssl-no-revoke Disable cert revocation checks (Schannel)
--ssl-reqd Require SSL/TLS
--ssl-revoke-best-effort Ignore missing cert CRL dist points
-2, --sslv2 SSLv2
-3, --sslv3 SSLv3
--stderr Where to redirect stderr
--styled-output Enable styled output for HTTP headers
--suppress-connect-headers Suppress proxy CONNECT response headers
--tcp-fastopen Use TCP Fast Open
--tcp-nodelay Set TCP_NODELAY
-t, --telnet-option Set telnet option
--tftp-blksize Set TFTP BLKSIZE option
--tftp-no-options Do not send any TFTP options
-z, --time-cond