Features -- what curl can do
curl tool
config file support
multiple URLs in a single command line
range "globbing" support: [0-13], {one,two,three}
multiple file upload on a single command line
redirect stderr
parallel transfers
libcurl
URL RFC 3986 syntax
custom maximum download time
custom lowest download speed acceptable
custom output result after completion
guesses protocol from hostname unless specified
supports .netrc
progress bar with time statistics while downloading
standard proxy environment variables support
have run on 101 operating systems and 28 CPU architectures
selectable network interface for outgoing traffic
IPv6 support on Unix and Windows
happy eyeballs dual-stack IPv4 + IPv6 connects
persistent connections
SOCKS 4 + 5 support, with or without local name resolving
pre-proxy support, for proxy chaining
supports username and password in proxy environment variables
operations through HTTP proxy "tunnel" (using CONNECT)
replaceable memory functions (malloc, free, realloc, etc)
asynchronous name resolving
both a push and a pull style interface
international domain names (IDN)
transfer rate limiting
stable API and ABI
TCP keep alive
TCP Fast Open
DNS cache (that can be shared between transfers)
non-blocking single-threaded parallel transfers
Unix domain sockets to server or proxy
DNS-over-HTTPS
uses non-blocking name resolves
selectable name resolver backend
URL API
parses RFC 3986 URLs
generates URLs from individual components
manages "redirects"
Header API
easy access to HTTP response headers, from all contexts
named headers
iterate over headers
TLS
selectable TLS backend(s)
TLS False Start
TLS version control
TLS session resumption
key pinning
mutual authentication
Use dedicated CA cert bundle
Use OS-provided CA store
separate TLS options for HTTPS proxy
HTTP
HTTP/0.9 responses are optionally accepted
HTTP/1.0
HTTP/1.1
HTTP/2, including multiplexing and server push
GET
PUT
HEAD
POST
multipart formpost (RFC 1867-style)
authentication: Basic, Digest, NTLM (9) and Negotiate (SPNEGO) to server and proxy
resume transfers
follow redirects
maximum amount of redirects to follow
custom HTTP request
cookie get/send fully parsed
reads/writes the Netscape cookie file format
custom headers (replace/remove internally generated headers)
custom user-agent string
custom referrer string
range
proxy authentication
time conditions
via HTTP proxy, HTTPS proxy or SOCKS proxy
HTTP/2 or HTTP/1.1 to HTTPS proxy
retrieve file modification date
Content-Encoding support for deflate, gzip, brotli and zstd
"Transfer-Encoding: chunked" support in uploads
HSTS
alt-svc
ETags
HTTP/1.1 trailers, both sending and getting
HTTPS
HTTP/3
using client certificates
verify server certificate
via HTTP proxy, HTTPS proxy or SOCKS proxy
select desired encryption
select usage of a specific TLS version
ECH
FTP
download
authentication
Kerberos 5
active/passive using PORT, EPRT, PASV or EPSV
single file size information (compare to HTTP HEAD)
'type=' URL support
directory listing
directory listing names-only
upload
upload append
upload via http-proxy as HTTP PUT
download resume
upload resume
custom ftp commands (before and/or after the transfer)
simple "range" support
via HTTP proxy, HTTPS proxy or SOCKS proxy
all operations can be tunneled through proxy
customizable to retrieve file modification date
no directory depth limit
FTPS
implicit
ftps://
support that use SSL on both connectionsexplicit "AUTH TLS" and "AUTH SSL" usage to "upgrade" plain
ftp://
connection to use SSL for both or one of the connections
SSH (both SCP and SFTP)
selectable SSH backend
known hosts support
public key fingerprinting
both password and public key auth
SFTP
both password and public key auth
with custom commands sent before/after the transfer
directory listing
TFTP
download
upload
TELNET
connection negotiation
custom telnet options
stdin/stdout I/O
LDAP
full LDAP URL support
DICT
extended DICT URL support
FILE
URL support
upload
resume
SMB
SMBv1 over TCP and SSL
download
upload
authentication with NTLMv1
SMTP
authentication: Plain, Login, CRAM-MD5, Digest-MD5, NTLM, Kerberos 5 and External
send emails
mail from support
mail size support
mail auth support for trusted server-to-server relaying
multiple recipients
via http-proxy
SMTPS
implicit
smtps://
supportexplicit "STARTTLS" usage to "upgrade" plain
smtp://
connections to use SSLvia http-proxy
POP3
authentication: Clear Text, APOP and SASL
SASL based authentication: Plain, Login, CRAM-MD5, Digest-MD5, NTLM, Kerberos 5 and External
list emails
retrieve emails
enhanced command support for: CAPA, DELE, TOP, STAT, UIDL and NOOP via custom requests
via http-proxy
POP3S
implicit
pop3s://
supportexplicit
STLS
usage to "upgrade" plainpop3://
connections to use SSLvia http-proxy
IMAP
authentication: Clear Text and SASL
SASL based authentication: Plain, Login, CRAM-MD5, Digest-MD5, NTLM, Kerberos 5 and External
list the folders of a mailbox
select a mailbox with support for verifying the
UIDVALIDITY
fetch emails with support for specifying the UID and SECTION
upload emails via the append command
enhanced command support for: EXAMINE, CREATE, DELETE, RENAME, STATUS, STORE, COPY and UID via custom requests
via http-proxy
IMAPS
implicit
imaps://
supportexplicit "STARTTLS" usage to "upgrade" plain
imap://
connections to use SSLvia http-proxy
MQTT
Subscribe to and publish topics using URL scheme
mqtt://broker/topic