;type=text/html' \
-F '=)' -F '=@textfile.txt' ... smtp://example.com
Data can be encoded for transfer using encoder=. Available en?
codings are binary and 8bit that do nothing else than adding the
corresponding Content-Transfer-Encoding header, 7bit that only
rejects 8-bit characters with a transfer error, quoted-printable
and base64 that encodes data according to the corresponding
schemes, limiting lines length to 76 characters.
Example: send multipart mail with a quoted-printable text mes?
sage and a base64 attached file:
curl -F '=text message;encoder=quoted-printable' \
-F '=@localfile;encoder=base64' ... smtp://example.com
See further examples and details in the MANUAL.
-F, --form can be used several times in a command line
Example:
curl --form "name=curl" --form "file=@loadthis" https://example.com
See also -d, --data, --form-string and --form-escape. This op?
tion is mutually exclusive to -d, --data and -I, --head and -T,
--upload-file.
--ftp-account
(FTP) When an FTP server asks for "account data" after user name
and password has been provided, this data is sent off using the
ACCT command.
If --ftp-account is provided several times, the last set value
is used.
Example:
curl --ftp-account "mr.robot" ftp://example.com/
See also -u, --user.
--ftp-alternative-to-user
(FTP) If authenticating with the USER and PASS commands fails,
send this command. When connecting to Tumbleweed's Secure
Transport server over FTPS using a client certificate, using
"SITE AUTH" tells the server to retrieve the username from the
certificate.
If --ftp-alternative-to-user is provided several times, the last
set value is used.
Example:
curl --ftp-alternative-to-user "U53r" ftp://example.com
See also --ftp-account and -u, --user.
--ftp-create-dirs
(FTP SFTP) When an FTP or SFTP URL/operation uses a path that
does not currently exist on the server, the standard behavior of
curl is to fail. Using this option, curl instead attempts to
create missing directories.
Providing --ftp-create-dirs multiple times has no extra effect.
Disable it again with --no-ftp-create-dirs.
Example:
curl --ftp-create-dirs -T file ftp://example.com/remote/path/file
See also --create-dirs.
--ftp-method
(FTP) Control what method curl should use to reach a file on an
FTP(S) server. The method argument should be one of the follow?
ing alternatives:
multicwd
curl does a single CWD operation for each path part in
the given URL. For deep hierarchies this means many com?
mands. This is how RFC 1738 says it should be done. This
is the default but the slowest behavior.
nocwd curl does no CWD at all. curl does SIZE, RETR, STOR etc
and give a full path to the server for all these com?
mands. This is the fastest behavior.
singlecwd
curl does one CWD with the full target directory and then
operates on the file "normally" (like in the multicwd
case). This is somewhat more standards compliant than
'nocwd' but without the full penalty of 'multicwd'.
If --ftp-method is provided several times, the last set value is
used.
Examples:
curl --ftp-method multicwd ftp://example.com/dir1/dir2/file
curl --ftp-method nocwd ftp://example.com/dir1/dir2/file
curl --ftp-method singlecwd ftp://example.com/dir1/dir2/file
See also -l, --list-only.
--ftp-pasv
(FTP) Use passive mode for the data connection. Passive is the
internal default behavior, but using this option can be used to
override a previous -P, --ftp-port option.
Reversing an enforced passive really is not doable but you must
then instead enforce the correct -P, --ftp-port again.
Passive mode means that curl tries the EPSV command first and
then PASV, unless --disable-epsv is used.
Providing --ftp-pasv multiple times has no extra effect. Dis?
able it again with --no-ftp-pasv.
Example:
curl --ftp-pasv ftp://example.com/
See also --disable-epsv.
-P, --ftp-port
(FTP) Reverses the default initiator/listener roles when con?
necting with FTP. This option makes curl use active mode. curl
then tells the server to connect back to the client's specified
address and port, while passive mode asks the server to setup an
IP address and port for it to connect to. should be
one of:
interface
e.g. "eth0" to specify which interface's IP address you
want to use (Unix only)
IP address
e.g. "192.168.10.1" to specify the exact IP address
host name
e.g. "my.host.domain" to specify the machine
- make curl pick the same IP address that is already used
for the control connection
Disable the use of PORT with --ftp-pasv. Disable the attempt to
use the EPRT command instead of PORT by using --disable-eprt.
EPRT is really PORT++.
You can also append ":[start]-[end]" to the right of the ad?
dress, to tell curl what TCP port range to use. That means you
specify a port range, from a lower to a higher number. A single
number works as well, but do note that it increases the risk of
failure since the port may not be available.
If -P, --ftp-port is provided several times, the last set value
is used.
Examples:
curl -P - ftp:/example.com
curl -P eth0 ftp:/example.com
curl -P 192.168.0.2 ftp:/example.com
See also --ftp-pasv and --disable-eprt.
--ftp-pret
(FTP) Tell curl to send a PRET command before PASV (and EPSV).
Certain FTP servers, mainly drftpd, require this non-standard
command for directory listings as well as up and downloads in
PASV mode.
Providing --ftp-pret multiple times has no extra effect. Dis?
able it again with --no-ftp-pret.
Example:
curl --ftp-pret ftp://example.com/
See also -P, --ftp-port and --ftp-pasv.
--ftp-skip-pasv-ip
(FTP) Tell curl to not use the IP address the server suggests in
its response to curl's PASV command when curl connects the data
connection. Instead curl reuses the same IP address it already
uses for the control connection.
This option is enabled by default (added in 7.74.0).
This option has no effect if PORT, EPRT or EPSV is used instead
of PASV.
Providing --ftp-skip-pasv-ip multiple times has no extra effect.
Disable it again with --no-ftp-skip-pasv-ip.
Example:
curl --ftp-skip-pasv-ip ftp://example.com/
See also --ftp-pasv.
--ftp-ssl-ccc-mode
(FTP) Sets the CCC mode. The passive mode does not initiate the
shutdown, but instead waits for the server to do it, and does
not reply to the shutdown from the server. The active mode ini?
tiates the shutdown and waits for a reply from the server.
Providing --ftp-ssl-ccc-mode multiple times has no extra effect.
Disable it again with --no-ftp-ssl-ccc-mode.
Example:
curl --ftp-ssl-ccc-mode active --ftp-ssl-ccc ftps://example.com/
See also --ftp-ssl-ccc.
--ftp-ssl-ccc
(FTP) Use CCC (Clear Command Channel) Shuts down the SSL/TLS
layer after authenticating. The rest of the control channel com?
munication is be unencrypted. This allows NAT routers to follow
the FTP transaction. The default mode is passive.
Providing --ftp-ssl-ccc multiple times has no extra effect.
Disable it again with --no-ftp-ssl-ccc.
Example:
curl --ftp-ssl-ccc ftps://example.com/
See also --ssl and --ftp-ssl-ccc-mode.
--ftp-ssl-control
(FTP) Require SSL/TLS for the FTP login, clear for transfer.
Allows secure authentication, but non-encrypted data transfers
for efficiency. Fails the transfer if the server does not sup?
port SSL/TLS.
Providing --ftp-ssl-control multiple times has no extra effect.
Disable it again with --no-ftp-ssl-control.
Example:
curl --ftp-ssl-control ftp://example.com
See also --ssl.
-G, --get
When used, this option makes all data specified with -d, --data,
--data-binary or --data-urlencode to be used in an HTTP GET re?
quest instead of the POST request that otherwise would be used.
The data is appended to the URL with a '?' separator.
If used in combination with -I, --head, the POST data is instead
appended to the URL with a HEAD request.
Providing -G, --get multiple times has no extra effect. Disable
it again with --no-get.
Examples:
curl --get https://example.com
curl --get -d "tool=curl" -d "age=old" https://example.com
curl --get -I -d "tool=curl" https://example.com
See also -d, --data and -X, --request.
-g, --globoff
This option switches off the "URL globbing parser". When you set
this option, you can specify URLs that contain the letters {}[]
without having curl itself interpret them. Note that these let?
ters are not normal legal URL contents but they should be en?
coded according to the URI standard.
Providing -g, --globoff multiple times has no extra effect.
Disable it again with --no-globoff.
Example:
curl -g "https://example.com/{[]}}}}"
See also -K, --config and -q, --disable.
--happy-eyeballs-timeout-ms
Happy Eyeballs is an algorithm that attempts to connect to both
IPv4 and IPv6 addresses for dual-stack hosts, giving IPv6 a
head-start of the specified number of milliseconds. If the IPv6
address cannot be connected to within that time, then a connec?
tion attempt is made to the IPv4 address in parallel. The first
connection to be established is the one that is used.
The range of suggested useful values is limited. Happy Eyeballs
RFC 6555 says "It is RECOMMENDED that connection attempts be
paced 150-250 ms apart to balance human factors against network
load." libcurl currently defaults to 200 ms. Firefox and Chrome
currently default to 300 ms.
If --happy-eyeballs-timeout-ms is provided several times, the
last set value is used.
Example:
curl --happy-eyeballs-timeout-ms 500 https://example.com
See also -m, --max-time and --connect-timeout. Added in 7.59.0.
--haproxy-clientip
(HTTP) Sets a client IP in HAProxy PROXY protocol v1 header at
the beginning of the connection.
For valid requests, IPv4 addresses must be indicated as a series
of exactly 4 integers in the range [0..255] inclusive written in
decimal representation separated by exactly one dot between each
other. Heading zeroes are not permitted in front of numbers in
order to avoid any possible confusion with octal numbers. IPv6
addresses must be indicated as series of 4 hexadecimal digits
(upper or lower case) delimited by colons between each other,
with the acceptance of one double colon sequence to replace the
largest acceptable range of consecutive zeroes. The total number
of decoded bits must exactly be 128.
Otherwise, any string can be accepted for the client IP and get
sent.
It replaces --haproxy-protocol if used, it is not necessary to
specify both flags.
This option is primarily useful when sending test requests to
verify a service is working as intended.
If --haproxy-clientip is provided several times, the last set
value is used.
Example:
curl --haproxy-clientip $IP
See also -x, --proxy. Added in 8.2.0.
--haproxy-protocol
(HTTP) Send a HAProxy PROXY protocol v1 header at the beginning
of the connection. This is used by some load balancers and re?
verse proxies to indicate the client's true IP address and port.
This option is primarily useful when sending test requests to a
service that expects this header.
Providing --haproxy-protocol multiple times has no extra effect.
Disable it again with --no-haproxy-protocol.
Example:
curl --haproxy-protocol https://example.com
See also -x, --proxy. Added in 7.60.0.
-I, --head
(HTTP FTP FILE) Fetch the headers only! HTTP-servers feature the
command HEAD which this uses to get nothing but the header of a
document. When used on an FTP or FILE file, curl displays the
file size and last modification time only.
Providing -I, --head multiple times has no extra effect. Dis?
able it again with --no-head.
Example:
curl -I https://example.com
See also -G, --get, -v, --verbose and --trace-ascii.
-H, --header
(HTTP IMAP SMTP) Extra header to include in information sent.
When used within an HTTP request, it is added to the regular re?
quest headers.
For an IMAP or SMTP MIME uploaded mail built with -F, --form op?
tions, it is prepended to the resulting MIME document, effec?
tively including it at the mail global level. It does not affect
raw uploaded mails (Added in 7.56.0).
You may specify any number of extra headers. Note that if you
should add a custom header that has the same name as one of the
internal ones curl would use, your externally set header is used
instead of the internal one. This allows you to make even trick?
ier stuff than curl would normally do. You should not replace
internally set headers without knowing perfectly well what you
are doing. Remove an internal header by giving a replacement
without content on the right side of the colon, as in: -H
"Host:". If you send the custom header with no-value then its
header must be terminated with a semicolon, such as -H "X-Cus?
tom-Header;" to send "X-Custom-Header:".
curl makes sure that each header you add/replace is sent with
the proper end-of-line marker, you should thus not add that as a
part of the header content: do not add newlines or carriage re?
turns, they only mess things up for you. curl passes on the ver?
batim string you give it without any filter or other safe
guards. That includes white space and control characters.
This option can take an argument in @filename style, which then
adds a header for each line in the input file. Using @- makes
curl read the header file from stdin. Added in 7.55.0.
Please note that most anti-spam utilities check the presence and
value of several MIME mail headers: these are "From:", "To:",
"Date:" and "Subject:" among others and should be added with
this option.
You need --proxy-header to send custom headers intended for an
HTTP proxy. Added in 7.37.0.
Passing on a "Transfer-Encoding: chunked" header when doing an
HTTP request with a request body, makes curl send the data using
chunked encoding.
WARNING: headers set with this option are set in all HTTP re?
quests - even after redirects are followed, like when told with
-L, --location. This can lead to the header being sent to other
hosts than the original host, so sensitive headers should be
used with caution combined with following redirects.
-H, --header can be used several times in a command line
Examples:
curl -H "X-First-Name: Joe" https://example.com
curl -H "User-Agent: yes-please/2000" https://example.com
curl -H "Host:" https://example.com
curl -H @headers.txt https://example.com
See also -A, --user-agent and -e, --referer.
-h, --help
Usage help. This lists all curl command line options within the
given category.
If no argument is provided, curl displays only the most impor?
tant command line arguments.
For category all, curl displays help for all options.
If category is specified, curl displays all available help cate?
gories.
Example:
curl --help all
See also -v, --verbose.
--hostpubmd5
(SFTP SCP) Pass a string containing 32 hexadecimal digits. The
string should be the 128 bit MD5 checksum of the remote host's
public key, curl refuses the connection with the host unless the
md5sums match.
If --hostpubmd5 is provided several times, the last set value is
used.
Example:
curl --hostpubmd5 e5c1c49020640a5ab0f2034854c321a8 sftp://example.com/
See also --hostpubsha256.
--hostpubsha256
(SFTP SCP) Pass a string containing a Base64-encoded SHA256 hash
of the remote host's public key. Curl refuses the connection
with the host unless the hashes match.
This feature requires libcurl to be built with libssh2 and does
not work with other SSH backends.
If --hostpubsha256 is provided several times, the last set value
is used.
Example:
curl --hostpubsha256 NDVkMTQxMGQ1ODdmMjQ3MjczYjAyOTY5MmRkMjVmNDQ= sftp://example.com/
See also --hostpubmd5. Added in 7.80.0.
--hsts
(HTTPS) This option enables HSTS for the transfer. If the file
name points to an existing HSTS cache file, that is used. After
a completed transfer, the cache is saved to the file name again
if it has been modified.
If curl is told to use HTTP:// for a transfer involving a host
name that exists in the HSTS cache, it upgrades the transfer to
use HTTPS. Each HSTS cache entry has an individual life time af?
ter which the upgrade is no longer performed.
Specify a "" file name (zero length) to avoid loading/saving and
make curl just handle HSTS in memory.
If this option is used several times, curl loads contents from
all the files but the last one is used for saving.
--hsts can be used several times in a command line
Example:
curl --hsts cache.txt https://example.com
See also --proto. Added in 7.74.0.
--http0.9
(HTTP) Tells curl to be fine with HTTP version 0.9 response.
HTTP/0.9 is a response without headers and therefore you can
also connect with this to non-HTTP servers and still get a re?
sponse since curl simply transparently downgrades - if allowed.
HTTP/0.9 is disabled by default (added in 7.66.0)
Providing --http0.9 multiple times has no extra effect. Disable
it again with --no-http0.9.
Example:
curl --http0.9 https://example.com
See also --http1.1, --http2 and --http3. Added in 7.64.0.
-0, --http1.0
(HTTP) Tells curl to use HTTP version 1.0 instead of using its
internally preferred HTTP version.
Providing -0, --http1.0 multiple times has no extra effect.
Example:
curl --http1.0 https://example.com
See also --http0.9 and --http1.1. This option is mutually exclu?
sive to --http1.1 and --http2 and --http2-prior-knowledge and
--http3.
--http1.1
(HTTP) Tells curl to use HTTP version 1.1.
Providing --http1.1 multiple times has no extra effect.
Example:
curl --http1.1 https://example.com
See also -0, --http1.0 and --http0.9. This option is mutually
exclusive to -0, --http1.0 and --http2 and --http2-prior-knowl?
edge and --http3.
--http2-prior-knowledge
(HTTP) Tells curl to issue its non-TLS HTTP requests using
HTTP/2 without HTTP/1.1 Upgrade. It requires prior knowledge
that the server supports HTTP/2 straight away. HTTPS requests
still do HTTP/2 the standard way with negotiated protocol ver?
sion in the TLS handshake.
Providing --http2-prior-knowledge multiple times has no extra
effect. Disable it again with --no-http2-prior-knowledge.
Example:
curl --http2-prior-knowledge https://example.com
See also --http2 and --http3. --http2-prior-knowledge requires
that the underlying libcurl was built to support HTTP/2. This
option is mutually exclusive to --http1.1 and -0, --http1.0 and
--http2 and --http3.
--http2
(HTTP) Tells curl to use HTTP version 2.
For HTTPS, this means curl negotiates HTTP/2 in the TLS hand?
shake. curl does this by default.
For HTTP, this means curl attempts to upgrade the request to
HTTP/2 using the Upgrade: request header.
When curl uses HTTP/2 over HTTPS, it does not itself insist on
TLS 1.2 or higher even though that is required by the specifica?
tion. A user can add this version requirement with --tlsv1.2.
Providing --http2 multiple times has no extra effect.
Example:
curl --http2 https://example.com
See also --http1.1, --http3 and --no-alpn. --http2 requires that
the underlying libcurl was built to support HTTP/2. This option
is mutually exclusive to --http1.1 and -0, --http1.0 and
--http2-prior-knowledge and --http3.
--http3-only
(HTTP) **WARNING**: this option is experimental. Do not use in
production.
Instructs curl to use HTTP/3 to the host in the URL, with no
fallback to earlier HTTP versions. HTTP/3 can only be used for
HTTPS and not for HTTP URLs. For HTTP, this option triggers an
error.
This option allows a user to avoid using the Alt-Svc method of
upgrading to HTTP/3 when you know that the target speaks HTTP/3
on the given host and port.
This option makes curl fail if a QUIC connection cannot be es?
tablished, it does not attempt any other HTTP versions on its
own. Use --http3 for similar functionality with a fallback.
Providing --http3-only multiple times has no extra effect.
Example:
curl --http3-only https://example.com
See also --http1.1, --http2 and --http3. --http3-only requires
that the underlying libcurl was built to support HTTP/3. This
option is mutually exclusive to --http1.1 and -0, --http1.0 and
--http2 and --http2-prior-knowledge and --http3. Added in
7.88.0.
--http3
(HTTP) **WARNING**: this option is experimental. Do not use in
production.
Tells curl to try HTTP/3 to the host in the URL, but fallback to
earlier HTTP versions if the HTTP/3 connection establishment
fails. HTTP/3 is only available for HTTPS and not for HTTP URLs.
This option allows a user to avoid using the Alt-Svc method of
upgrading to HTTP/3 when you know that the target speaks HTTP/3
on the given host and port.
When asked to use HTTP/3, curl issues a separate attempt to use
older HTTP versions with a slight delay, so if the HTTP/3 trans?
fer fails or is slow, curl still tries to proceed with an older
HTTP version.
Use --http3-only for similar functionality without a fallback.
Providing --http3 multiple times has no extra effect.
Example:
curl --http3 https://example.com
See also --http1.1 and --http2. --http3 requires that the under?
lying libcurl was built to support HTTP/3. This option is mutu?
ally exclusive to --http1.1 and -0, --http1.0 and --http2 and
--http2-prior-knowledge and --http3-only. Added in 7.66.0.
--ignore-content-length
(FTP HTTP) For HTTP, Ignore the Content-Length header. This is
particularly useful for servers running Apache 1.x, which re?
ports incorrect Content-Length for files larger than 2 giga?
bytes.
For FTP, this makes curl skip the SIZE command to figure out the
size before downloading a file.
This option does not work for HTTP if libcurl was built to use
hyper.
Providing --ignore-content-length multiple times has no extra
effect. Disable it again with --no-ignore-content-length.
Example:
curl --ignore-content-length https://example.com
See also --ftp-skip-pasv-ip.
-i, --include
Include the HTTP response headers in the output. The HTTP re?
sponse headers can include things like server name, cookies,
date of the document, HTTP version and more...
To view the request headers, consider the -v, --verbose option.
Prior to 7.75.0 curl did not print the headers if -f, --fail was
used in combination with this option and there was error re?
ported by server.
Providing -i, --include multiple times has no extra effect.
Disable it again with --no-include.
Example:
curl -i https://example.com
See also -v, --verbose.
-k, --insecure
(TLS SFTP SCP) By default, every secure connection curl makes is
verified to be secure before the transfer takes place. This op?
tion makes curl skip the verification step and proceed without
checking.
When this option is not used for protocols using TLS, curl veri?
fies the server's TLS certificate before it continues: that the
certificate contains the right name which matches the host name
used in the URL and that the certificate has been signed by a CA
certificate present in the cert store. See this online resource
for further details:
https://curl.se/docs/sslcerts.html
For SFTP and SCP, this option makes curl skip the known_hosts
verification. known_hosts is a file normally stored in the
user's home directory in the ".ssh" subdirectory, which contains
host names and their public keys.
WARNING: using this option makes the transfer insecure.
When curl uses secure protocols it trusts responses and allows
for example HSTS and Alt-Svc information to be stored and used
subsequently. Using -k, --insecure can make curl trust and use
such information from malicious servers.
Providing -k, --insecure multiple times has no extra effect.
Disable it again with --no-insecure.
Example:
curl --insecure https://example.com
See also --proxy-insecure, --cacert and --capath.
--interface
Perform an operation using a specified interface. You can enter
interface name, IP address or host name. An example could look
like:
curl --interface eth0:1 https://www.example.com/
On Linux it can be used to specify a VRF, but the binary needs
to either have CAP_NET_RAW or to be run as root. More informa?
tion about Linux VRF: https://www.kernel.org/doc/Documenta?
tion/networking/vrf.txt
If --interface is provided several times, the last set value is
used.
Example:
curl --interface eth0 https://example.com
See also --dns-interface.
--ipfs-gateway
Specify which gateway to use for IPFS and IPNS URLs. Not speci?
fying this will instead make curl check if the IPFS_GATEWAY en?
vironment variable is set, or if a ~/.ipfs/gateway file holding
the gateway URL exists.
If you run a local IPFS node, this gateway is by default avail?
able under http://localhost:8080. A full example URL would look
like:
curl --ipfs-gateway http://localhost:8080 ipfs://bafybeigagd5nmnn2iys2f3doro7ydrevyr2mzarwidgadawmamiteydbzi
There are many public IPFS gateways. See for example:
https://ipfs.github.io/public-gateway-checker/
WARNING: If you opt to go for a remote gateway you should be
aware that you completely trust the gateway. This is fine in lo?
cal gateways as you host it yourself. With remote gateways there
could potentially be a malicious actor returning you data that
does not match the request you made, inspect or even interfere
with the request. You will not notice this when using curl. A
mitigation could be to go for a "trustless" gateway. This means
you locally verify that the data. Consult the docs page on
trusted vs trustless: https://docs.ipfs.tech/refer?
ence/http/gateway/#trusted-vs-trustless
If --ipfs-gateway is provided several times, the last set value
is used.
Example:
curl --ipfs-gateway https://example.com ipfs://
See also -h, --help and -M, --manual. Added in 8.4.0.
-4, --ipv4
This option tells curl to use IPv4 addresses only when resolving
host names, and not for example try IPv6.
Providing -4, --ipv4 multiple times has no extra effect.
Example:
curl --ipv4 https://example.com
See also --http1.1 and --http2. This option is mutually exclu?
sive to -6, --ipv6.
-6, --ipv6
This option tells curl to use IPv6 addresses only when resolving
host names, and not for example try IPv4.
Providing -6, --ipv6 multiple times has no extra effect.
Example:
curl --ipv6 https://example.com
See also --http1.1 and --http2. This option is mutually exclu?
sive to -4, --ipv4.
--json
(HTTP) Sends the specified JSON data in a POST request to the
HTTP server. --json works as a shortcut for passing on these
three options:
--data [arg]
--header "Content-Type: application/json"
--header "Accept: application/json"
There is no verification that the passed in data is actual JSON
or that the syntax is correct.
If you start the data with the letter @, the rest should be a
file name to read the data from, or a single dash (-) if you
want curl to read the data from stdin. Posting data from a file
named 'foobar' would thus be done with --json @foobar and to in?
stead read the data from stdin, use --json @-.
If this option is used more than once on the same command line,
the additional data pieces are concatenated to the previous be?
fore sending.
The headers this option sets can be overridden with -H, --header
as usual.
--json can be used several times in a command line
Examples:
curl --json '{ "drink": "coffe" }' https://example.com
curl --json '{ "drink":' --json ' "coffe" }' https://example.com
curl --json @prepared https://example.com
curl --json @- https://example.com < json.txt
See also --data-binary and --data-raw. This option is mutually
exclusive to -F, --form and -I, --head and -T, --upload-file.
Added in 7.82.0.
-j, --junk-session-cookies
(HTTP) When curl is told to read cookies from a given file, this
option makes it discard all "session cookies". This has the same
effect as if a new session is started. Typical browsers discard
session cookies when they are closed down.
Providing -j, --junk-session-cookies multiple times has no extra
effect. Disable it again with --no-junk-session-cookies.
Example:
curl --junk-session-cookies -b cookies.txt https://example.com
See also -b, --cookie and -c, --cookie-jar.
--keepalive-time
This option sets the time a connection needs to remain idle be?
fore sending keepalive probes and the time between individual
keepalive probes. It is currently effective on operating systems
offering the TCP_KEEPIDLE and TCP_KEEPINTVL socket options
(meaning Linux, recent AIX, HP-UX and more). Keepalives are
used by the TCP stack to detect broken networks on idle connec?
tions. The number of missed keepalive probes before declaring
the connection down is OS dependent and is commonly 9 or 10.
This option has no effect if --no-keepalive is used.
If unspecified, the option defaults to 60 seconds.
If --keepalive-time is provided several times, the last set
value is used.
Example:
curl --keepalive-time 20 https://example.com
See also --no-keepalive and -m, --max-time.
--key-type
(TLS) Private key file type. Specify which type your --key pro?
vided private key is. DER, PEM, and ENG are supported. If not
specified, PEM is assumed.
If --key-type is provided several times, the last set value is
used.
Example:
curl --key-type DER --key here https://example.com
See also --key.
--key
(TLS SSH) Private key file name. Allows you to provide your pri?
vate key in this separate file. For SSH, if not specified, curl
tries the following candidates in order: '~/.ssh/id_rsa',
'~/.ssh/id_dsa', './id_rsa', './id_dsa'.
If curl is built against OpenSSL library, and the engine pkcs11
is available, then a PKCS#11 URI (RFC 7512) can be used to spec?
ify a private key located in a PKCS#11 device. A string begin?
ning with "pkcs11:" is interpreted as a PKCS#11 URI. If a
PKCS#11 URI is provided, then the --engine option is set as
"pkcs11" if none was provided and the --key-type option is set
as "ENG" if none was provided.
If curl is built against Secure Transport or Schannel then this
option is ignored for TLS protocols (HTTPS, etc). Those backends
expect the private key to be already present in the keychain or
PKCS#12 file containing the certificate.
If --key is provided several times, the last set value is used.
Example:
curl --cert certificate --key here https://example.com
See also --key-type and -E, --cert.
--krb
(FTP) Enable Kerberos authentication and use. The level must be
entered and should be one of 'clear', 'safe', 'confidential', or
'private'. Should you use a level that is not one of these,
'private' is used.
If --krb is provided several times, the last set value is used.
Example:
curl --krb clear ftp://example.com/
See also --delegation and --ssl. --krb requires that the under?
lying libcurl was built to support Kerberos.
--libcurl
Append this option to any ordinary curl command line, and you
get libcurl-using C source code written to the file that does
the equivalent of what your command-line operation does!
This option is global and does not need to be specified for each
use of --next.
If --libcurl is provided several times, the last set value is
used.
Example:
curl --libcurl client.c https://example.com
See also -v, --verbose.
--limit-rate
Specify the maximum transfer rate you want curl to use - for
both downloads and uploads. This feature is useful if you have a
limited pipe and you would like your transfer not to use your
entire bandwidth. To make it slower than it otherwise would be.
The given speed is measured in bytes/second, unless a suffix is
appended. Appending 'k' or 'K' counts the number as kilobytes,
'm' or 'M' makes it megabytes, while 'g' or 'G' makes it giga?
bytes. The suffixes (k, M, G, T, P) are 1024 based. For example
1k is 1024. Examples: 200K, 3m and 1G.
The rate limiting logic works on averaging the transfer speed to
no more than the set threshold over a period of multiple sec?
onds.
If you also use the -Y, --speed-limit option, that option takes
precedence and might cripple the rate-limiting slightly, to help
keeping the speed-limit logic working.
If --limit-rate is provided several times, the last set value is
used.
Examples:
curl --limit-rate 100K https://example.com
curl --limit-rate 1000 https://example.com
curl --limit-rate 10M https://example.com
See also --rate, -Y, --speed-limit and -y, --speed-time.
-l, --list-only
(FTP POP3 SFTP) (FTP) When listing an FTP directory, this switch
forces a name-only view. This is especially useful if the user
wants to machine-parse the contents of an FTP directory since
the normal directory view does not use a standard look or for?
mat. When used like this, the option causes an NLST command to
be sent to the server instead of LIST.
Note: Some FTP servers list only files in their response to
NLST; they do not include sub-directories and symbolic links.
(SFTP) When listing an SFTP directory, this switch forces a
name-only view, one per line. This is especially useful if the
user wants to machine-parse the contents of an SFTP directory
since the normal directory view provides more information than
just file names.
(POP3) When retrieving a specific email from POP3, this switch
forces a LIST command to be performed instead of RETR. This is
particularly useful if the user wants to see if a specific mes?
sage-id exists on the server and what size it is.
Note: When combined with -X, --request, this option can be used
to send a UIDL command instead, so the user may use the email's
unique identifier rather than its message-id to make the re?
quest.
Providing -l, --list-only multiple times has no extra effect.
Disable it again with --no-list-only.
Example:
curl --list-only ftp://example.com/dir/
See also -Q, --quote and -X, --request.
--local-port
Set a preferred single number or range (FROM-TO) of local port
numbers to use for the connection(s). Note that port numbers by
nature are a scarce resource so setting this range to something
too narrow might cause unnecessary connection setup failures.
If --local-port is provided several times, the last set value is
used.
Example:
curl --local-port 1000-3000 https://example.com
See also -g, --globoff.
--location-trusted
(HTTP) Like -L, --location, but allows sending the name + pass?
word to all hosts that the site may redirect to. This may or may
not introduce a security breach if the site redirects you to a
site to which you send your authentication info (which is plain?
text in the case of HTTP Basic authentication).
Providing --location-trusted multiple times has no extra effect.
Disable it again with --no-location-trusted.
Example:
curl --location-trusted -u user:password https://example.com
See also -u, --user.
-L, --location
(HTTP) If the server reports that the requested page has moved
to a different location (indicated with a Location: header and a
3XX response code), this option makes curl redo the request on
the new place. If used together with -i, --include or -I,
--head, headers from all requested pages are shown.
When authentication is used, curl only sends its credentials to
the initial host. If a redirect takes curl to a different host,
it does not get the user+password pass on. See also --loca?
tion-trusted on how to change this.
Limit the amount of redirects to follow by using the
--max-redirs option.
When curl follows a redirect and if the request is a POST, it
sends the following request with a GET if the HTTP response was
301, 302, or 303. If the response code was any other 3xx code,
curl resends the following request using the same unmodified
method.
You can tell curl to not change POST requests to GET after a 30x
response by using the dedicated options for that: --post301,
--post302 and --post303.
The method set with -X, --request overrides the method curl
would otherwise select to use.
Providing -L, --location multiple times has no extra effect.
Disable it again with --no-location.
Example:
curl -L https://example.com
See also --resolve and --alt-svc.
--login-options
(IMAP LDAP POP3 SMTP) Specify the login options to use during
server authentication.
You can use login options to specify protocol specific options
that may be used during authentication. At present only IMAP,
POP3 and SMTP support login options. For more information about
login options please see RFC 2384, RFC 5092 and the IETF draft
https://datatracker.ietf.org/doc/html/draft-earhart-url-smtp-00.
Since 8.2.0, IMAP supports the login option "AUTH=+LOGIN". With
this option, curl uses the plain (not SASL) LOGIN IMAP command
even if the server advertises SASL authentication. Care should
be taken in using this option, as it sends your password over
the network in plain text. This does not work if the IMAP server
disables the plain LOGIN (e.g. to prevent password snooping).
If --login-options is provided several times, the last set value
is used.
Example:
curl --login-options 'AUTH=*' imap://example.com
See also -u, --user.
--mail-auth
(SMTP) Specify a single address. This is used to specify the au?
thentication address (identity) of a submitted message that is
being relayed to another server.
If --mail-auth is provided several times, the last set value is
used.
Example:
curl --mail-auth user@example.come -T mail smtp://example.com/
See also --mail-rcpt and --mail-from.
--mail-from
(SMTP) Specify a single address that the given mail should get
sent from.
If --mail-from is provided several times, the last set value is
used.
Example:
curl --mail-from user@example.com -T mail smtp://example.com/
See also --mail-rcpt and --mail-auth.
--mail-rcpt-allowfails
(SMTP) When sending data to multiple recipients, by default curl
aborts SMTP conversation if at least one of the recipients
causes RCPT TO command to return an error.
The default behavior can be changed by passing --mail-rcpt-al?
lowfails command-line option which makes curl ignore errors and
proceed with the remaining valid recipients.
If all recipients trigger RCPT TO failures and this flag is
specified, curl still aborts the SMTP conversation and returns
the error received from to the last RCPT TO command.
Providing --mail-rcpt-allowfails multiple times has no extra ef?
fect. Disable it again with --no-mail-rcpt-allowfails.
Example:
curl --mail-rcpt-allowfails --mail-rcpt dest@example.com smtp://example.com
See also --mail-rcpt. Added in 7.69.0.
--mail-rcpt
(SMTP) Specify a single email address, user name or mailing list
name. Repeat this option several times to send to multiple re?
cipients.
When performing an address verification (VRFY command), the re?
cipient should be specified as the user name or user name and
domain (as per Section 3.5 of RFC 5321).
When performing a mailing list expand (EXPN command), the recip?
ient should be specified using the mailing list name, such as
"Friends" or "London-Office".
--mail-rcpt can be used several times in a command line
Example:
curl --mail-rcpt user@example.net smtp://example.com
See also --mail-rcpt-allowfails.
-M, --manual
Manual. Display the huge help text.
Example:
curl --manual
See also -v, --verbose, --libcurl and --trace.
--max-filesize
(FTP HTTP MQTT) Specify the maximum size (in bytes) of a file to
download. If the file requested is larger than this value, the
transfer does not start and curl returns with exit code 63.
A size modifier may be used. For example, Appending 'k' or 'K'
counts the number as kilobytes, 'm' or 'M' makes it megabytes,
while 'g' or 'G' makes it gigabytes. Examples: 200K, 3m and 1G.
(Added in 7.58.0)
NOTE: before curl 8.4.0, when the file size is not known prior
to download, for such files this option has no effect even if
the file transfer ends up being larger than this given limit.
Starting with curl 8.4.0, this option aborts the transfer if it
reaches the threshold during transfer.
If --max-filesize is provided several times, the last set value
is used.
Example:
curl --max-filesize 100K https://example.com
See also --limit-rate.
--max-redirs
(HTTP) Set maximum number of redirections to follow. When -L,
--location is used, to prevent curl from following too many
redirects, by default, the limit is set to 50 redirects. Set
this option to -1 to make it unlimited.
If --max-redirs is provided several times, the last set value is
used.
Example:
curl --max-redirs 3 --location https://example.com
See also -L, --location.
-m, --max-time
Maximum time in seconds that you allow each transfer to take.
This is useful for preventing your batch jobs from hanging for
hours due to slow networks or links going down. This option ac?
cepts decimal values.
If you enable retrying the transfer (--retry) then the maximum
time counter is reset each time the transfer is retried. You can
use --retry-max-time to limit the retry time.
The decimal value needs to provided using a dot (.) as decimal
separator - not the local version even if it might be using an?
other separator.
If -m, --max-time is provided several times, the last set value
is used.
Examples:
curl --max-time 10 https://example.com
curl --max-time 2.92 https://example.com
See also --connect-timeout and --retry-max-time.
--metalink
This option was previously used to specify a Metalink resource.
Metalink support is disabled in curl for security reasons (added
in 7.78.0).
If --metalink is provided several times, the last set value is
used.
Example:
curl --metalink file https://example.com
See also -Z, --parallel.
--negotiate
(HTTP) Enables Negotiate (SPNEGO) authentication.
This option requires a library built with GSS-API or SSPI sup?
port. Use -V, --version to see if your curl supports
GSS-API/SSPI or SPNEGO.
When using this option, you must also provide a fake -u, --user
option to activate the authentication code properly. Sending a
'-u :' is enough as the user name and password from the -u,
--user option are not actually used.
Providing --negotiate multiple times has no extra effect.
Example:
curl --negotiate -u : https://example.com
See also --basic, --ntlm, --anyauth and --proxy-negotiate.
--netrc-file
This option is similar to -n, --netrc, except that you provide
the path (absolute or relative) to the netrc file that curl
should use. You can only specify one netrc file per invocation.
It abides by --netrc-optional if specified.
If --netrc-file is provided several times, the last set value is
used.
Example:
curl --netrc-file netrc https://example.com
See also -n, --netrc, -u, --user and -K, --config. This option
is mutually exclusive to -n, --netrc.
--netrc-optional
Similar to -n, --netrc, but this option makes the .netrc usage
optional and not mandatory as the -n, --netrc option does.
Providing --netrc-optional multiple times has no extra effect.
Disable it again with --no-netrc-optional.
Example:
curl --netrc-optional https://example.com
See also --netrc-file. This option is mutually exclusive to -n,
--netrc.
-n, --netrc
Makes curl scan the .netrc file in the user's home directory for
login name and password. This is typically used for FTP on Unix.
If used with HTTP, curl enables user authentication. See
netrc(5) and ftp(1) for details on the file format. Curl does
not complain if that file does not have the right permissions
(it should be neither world- nor group-readable). The environ?
ment variable "HOME" is used to find the home directory.
On Windows two filenames in the home directory are checked:
.netrc and _netrc, preferring the former. Older versions on Win?
dows checked for _netrc only.
A quick and simple example of how to setup a .netrc to allow
curl to FTP to the machine host.domain.com with user name 'my?
self' and password 'secret' could look similar to:
machine host.domain.com
login myself
password secret
Providing -n, --netrc multiple times has no extra effect. Dis?
able it again with --no-netrc.
Example:
curl --netrc https://example.com
See also --netrc-file, -K, --config and -u, --user. This option
is mutually exclusive to --netrc-file and --netrc-optional.
-:, --next
Tells curl to use a separate operation for the following URL and
associated options. This allows you to send several URL re?
quests, each with their own specific options, for example, such
as different user names or custom requests for each.
-:, --next resets all local options and only global ones have
their values survive over to the operation following the -:,
--next instruction. Global options include -v, --verbose,
--trace, --trace-ascii and --fail-early.
For example, you can do both a GET and a POST in a single com?
mand line:
curl www1.example.com --next -d postthis www2.example.com
-:, --next can be used several times in a command line
Examples:
curl https://example.com --next -d postthis www2.example.com
curl -I https://example.com --next https://example.net/
See also -Z, --parallel and -K, --config.
--no-alpn
(HTTPS) Disable the ALPN TLS extension. ALPN is enabled by de?
fault if libcurl was built with an SSL library that supports
ALPN. ALPN is used by a libcurl that supports HTTP/2 to negoti?
ate HTTP/2 support with the server during https sessions.
Note that this is the negated option name documented. You can
use --alpn to enable ALPN.
Providing --no-alpn multiple times has no extra effect. Disable
it again with --alpn.
Example:
curl --no-alpn https://example.com
See also --no-npn and --http2. --no-alpn requires that the un?
derlying libcurl was built to support TLS.
-N, --no-buffer
Disables the buffering of the output stream. In normal work sit?
uations, curl uses a standard buffered output stream that has
the effect that it outputs the data in chunks, not necessarily
exactly when the data arrives. Using this option disables that
buffering.
Note that this is the negated option name documented. You can
use --buffer to enable buffering again.
Providing -N, --no-buffer multiple times has no extra effect.
Disable it again with --buffer.
Example:
curl --no-buffer https://example.com
See also -#, --progress-bar.
--no-clobber
When used in conjunction with the -o, --output, -J, --re?
mote-header-name, -O, --remote-name, or --remote-name-all op?
tions, curl avoids overwriting files that already exist. In?
stead, a dot and a number gets appended to the name of the file
that would be created, up to filename.100 after which it does
not create any file.
Note that this is the negated option name documented. You can
thus use --clobber to enforce the clobbering, even if -J, --re?
mote-header-name is specified.
Providing --no-clobber multiple times has no extra effect. Dis?
able it again with --clobber.
Example:
curl --no-clobber --output local/dir/file https://example.com
See also -o, --output and -O, --remote-name. Added in 7.83.0.
--no-keepalive
Disables the use of keepalive messages on the TCP connection.
curl otherwise enables them by default.
Note that this is the negated option name documented. You can
thus use --keepalive to enforce keepalive.
Providing --no-keepalive multiple times has no extra effect.
Disable it again with --keepalive.
Example:
curl --no-keepalive https://example.com
See also --keepalive-time.
--no-npn
(HTTPS) curl never uses NPN, this option has no effect (added in
7.86.0).
Disable the NPN TLS extension. NPN is enabled by default if
libcurl was built with an SSL library that supports NPN. NPN is
used by a libcurl that supports HTTP/2 to negotiate HTTP/2 sup?
port with the server during https sessions.
Providing --no-npn multiple times has no extra effect. Disable
it again with --npn.
Example:
curl --no-npn https://example.com
See also --no-alpn and --http2. --no-npn requires that the un?
derlying libcurl was built to support TLS.
--no-progress-meter
Option to switch off the progress meter output without muting or
otherwise affecting warning and informational messages like -s,
--silent does.
Note that this is the negated option name documented. You can
thus use --progress-meter to enable the progress meter again.
Providing --no-progress-meter multiple times has no extra ef?
fect. Disable it again with --progress-meter.
Example:
curl --no-progress-meter -o store https://example.com
See also -v, --verbose and -s, --silent. Added in 7.67.0.
--no-sessionid
(TLS) Disable curl's use of SSL session-ID caching. By default
all transfers are done using the cache. Note that while nothing
should ever get hurt by attempting to reuse SSL session-IDs,
there seem to be broken SSL implementations in the wild that may
require you to disable this in order for you to succeed.
Note that this is the negated option name documented. You can
thus use --sessionid to enforce session-ID caching.
Providing --no-sessionid multiple times has no extra effect.
Disable it again with --sessionid.
Example:
curl --no-sessionid https://example.com
See also -k, --insecure.
--noproxy
Comma-separated list of hosts for which not to use a proxy, if
one is specified. The only wildcard is a single * character,
which matches all hosts, and effectively disables the proxy.
Each name in this list is matched as either a domain which con?
tains the hostname, or the hostname itself. For example, lo?
cal.com would match local.com, local.com:80, and www.local.com,
but not www.notlocal.com.
This option overrides the environment variables that disable the
proxy ('no_proxy' and 'NO_PROXY') (added in 7.53.0). If there is
an environment variable disabling a proxy, you can set the no
proxy list to "" to override it.
IP addresses specified to this option can be provided using CIDR
notation (added in 7.86.0): an appended slash and number speci?
fies the number of "network bits" out of the address to use in
the comparison. For example "192.168.0.0/16" would match all ad?
dresses starting with "192.168".
If --noproxy is provided several times, the last set value is
used.
Example:
curl --noproxy "www.example" https://example.com
See also -x, --proxy.
--ntlm-wb
(HTTP) Enables NTLM much in the style --ntlm does, but hand over
the authentication to the separate binary ntlmauth application
that is executed when needed.
Providing --ntlm-wb multiple times has no extra effect.
Example:
curl --ntlm-wb -u user:password https://example.com
See also --ntlm and --proxy-ntlm.
--ntlm (HTTP) Enables NTLM authentication. The NTLM authentication
method was designed by Microsoft and is used by IIS web servers.
It is a proprietary protocol, reverse-engineered by clever peo?
ple and implemented in curl based on their efforts. This kind of
behavior should not be endorsed, you should encourage everyone
who uses NTLM to switch to a public and documented authentica?
tion method instead, such as Digest.
If you want to enable NTLM for your proxy authentication, then
use --proxy-ntlm.
Providing --ntlm multiple times has no extra effect.
Example:
curl --ntlm -u user:password https://example.com
See also --proxy-ntlm. --ntlm requires that the underlying
libcurl was built to support TLS. This option is mutually exclu?
sive to --basic and --negotiate and --digest and --anyauth.
--oauth2-bearer
(IMAP LDAP POP3 SMTP HTTP) Specify the Bearer Token for OAUTH
2.0 server authentication. The Bearer Token is used in conjunc?
tion with the user name which can be specified as part of the
--url or -u, --user options.
The Bearer Token and user name are formatted according to RFC
6750.
If --oauth2-bearer is provided several times, the last set value
is used.
Example:
curl --oauth2-bearer "mF_9.B5f-4.1JqM" https://example.com
See also --basic, --ntlm and --digest.
--output-dir
This option specifies the directory in which files should be
stored, when -O, --remote-name or -o, --output are used.
The given output directory is used for all URLs and output op?
tions on the command line, up until the first -:, --next.
If the specified target directory does not exist, the operation
fails unless --create-dirs is also used.
If --output-dir is provided several times, the last set value is
used.
Example:
curl --output-dir "tmp" -O https://example.com
See also -O, --remote-name and -J, --remote-header-name. Added
in 7.73.0.
-o, --output
Write output to instead of stdout. If you are using {} or
[] to fetch multiple documents, you should quote the URL and you
can use '#' followed by a number in the specifier. That
variable is replaced with the current string for the URL being
fetched. Like in:
curl "http://{one,two}.example.com" -o "file_#1.txt"
or use several variables like:
curl "http://{site,host}.host[1-5].example" -o "#1_#2"
You may use this option as many times as the number of URLs you
have. For example, if you specify two URLs on the same command
line, you can use it like this:
curl -o aa example.com -o bb example.net
and the order of the -o options and the URLs does not matter,
just that the first -o is for the first URL and so on, so the
above command line can also be written as
curl example.com example.net -o aa -o bb
See also the --create-dirs option to create the local directo?
ries dynamically. Specifying the output as '-' (a single dash)
passes the output to stdout.
To suppress response bodies, you can redirect output to
/dev/null:
curl example.com -o /dev/null
Or for Windows:
curl example.com -o nul
-o, --output can be used several times in a command line
Examples:
curl -o file https://example.com
curl "http://{one,two}.example.com" -o "file_#1.txt"
curl "http://{site,host}.host[1-5].example" -o "#1_#2"
curl -o file https://example.com -o file2 https://example.net
See also -O, --remote-name, --remote-name-all and -J, --re?
mote-header-name.
--parallel-immediate
When doing parallel transfers, this option instructs curl that
it should rather prefer opening up more connections in parallel
at once rather than waiting to see if new transfers can be added
as multiplexed streams on another connection.
This option is global and does not need to be specified for each
use of --next.
Providing --parallel-immediate multiple times has no extra ef?
fect. Disable it again with --no-parallel-immediate.
Example:
curl --parallel-immediate -Z https://example.com -o file1 https://example.com -o file2
See also -Z, --parallel and --parallel-max. Added in 7.68.0.
--parallel-max
When asked to do parallel transfers, using -Z, --parallel, this
option controls the maximum amount of transfers to do simultane?
ously.
This option is global and does not need to be specified for each
use of -:, --next.
The default is 50.
If --parallel-max is provided several times, the last set value
is used.
Example:
curl --parallel-max 100 -Z https://example.com ftp://example.com/
See also -Z, --parallel. Added in 7.66.0.
-Z, --parallel
Makes curl perform its transfers in parallel as compared to the
regular serial manner.
This option is global and does not need to be specified for each
use of --next.
Providing -Z, --parallel multiple times has no extra effect.
Disable it again with --no-parallel.
Example:
curl --parallel https://example.com -o file1 https://example.com -o file2
See also -:, --next and -v, --verbose. Added in 7.66.0.
--pass
(SSH TLS) Passphrase for the private key.
If --pass is provided several times, the last set value is used.
Example:
curl --pass secret --key file https://example.com
See also --key and -u, --user.
--path-as-is
Tell curl to not handle sequences of /../ or /./ in the given
URL path. Normally curl squashes or merges them according to
standards but with this option set you tell it not to do that.
Providing --path-as-is multiple times has no extra effect. Dis?
able it again with --no-path-as-is.
Example:
curl --path-as-is https://example.com/../../etc/passwd
See also --request-target.
--pinnedpubkey
(TLS) Tells curl to use the specified public key file (or
hashes) to verify the peer. This can be a path to a file which
contains a single public key in PEM or DER format, or any number
of base64 encoded sha256 hashes preceded by 'sha256//' and sepa?
rated by ';'.
When negotiating a TLS or SSL connection, the server sends a
certificate indicating its identity. A public key is extracted
from this certificate and if it does not exactly match the pub?
lic key provided to this option, curl aborts the connection be?
fore sending or receiving any data.
This option is independent of option -k, --insecure. If you use
both options together then the peer is still verified by public
key.
PEM/DER support:
OpenSSL and GnuTLS, wolfSSL (added in 7.43.0), mbedTLS , Secure
Transport macOS 10.7+/iOS 10+ (7.54.1), Schannel (7.58.1)
sha256 support:
OpenSSL, GnuTLS and wolfSSL, mbedTLS (added in 7.47.0), Secure
Transport macOS 10.7+/iOS 10+ (7.54.1), Schannel (7.58.1)
Other SSL backends not supported.
If --pinnedpubkey is provided several times, the last set value
is used.
Examples:
curl --pinnedpubkey keyfile https://example.com
curl --pinnedpubkey 'sha256//ce118b51897f4452dc' https://example.com
See also --hostpubsha256.
--post301
(HTTP) Tells curl to respect RFC 7231/6.4.2 and not convert POST
requests into GET requests when following a 301 redirection. The
non-RFC behavior is ubiquitous in web browsers, so curl does the
conversion by default to maintain consistency. However, a server
may require a POST to remain a POST after such a redirection.
This option is meaningful only when using -L, --location.
Providing --post301 multiple times has no extra effect. Disable
it again with --no-post301.
Example:
curl --post301 --location -d "data" https://example.com
See also --post302, --post303 and -L, --location.
--post302
(HTTP) Tells curl to respect RFC 7231/6.4.3 and not convert POST
requests into GET requests when following a 302 redirection. The
non-RFC behavior is ubiquitous in web browsers, so curl does the
conversion by default to maintain consistency. However, a server
may require a POST to remain a POST after such a redirection.
This option is meaningful only when using -L, --location.
Providing --post302 multiple times has no extra effect. Disable
it again with --no-post302.
Example:
curl --post302 --location -d "data" https://example.com
See also --post301, --post303 and -L, --location.
--post303
(HTTP) Tells curl to violate RFC 7231/6.4.4 and not convert POST
requests into GET requests when following 303 redirections. A
server may require a POST to remain a POST after a 303 redirec?
tion. This option is meaningful only when using -L, --location.
Providing --post303 multiple times has no extra effect. Disable
it again with --no-post303.
Example:
curl --post303 --location -d "data" https://example.com
See also --post302, --post301 and -L, --location.
--preproxy [protocol://]host[:port]
Use the specified SOCKS proxy before connecting to an HTTP or
HTTPS -x, --proxy. In such a case curl first connects to the
SOCKS proxy and then connects (through SOCKS) to the HTTP or
HTTPS proxy. Hence pre proxy.
The pre proxy string should be specified with a protocol:// pre?
fix to specify alternative proxy protocols. Use socks4://,
socks4a://, socks5:// or socks5h:// to request the specific
SOCKS version to be used. No protocol specified makes curl de?
fault to SOCKS4.
If the port number is not specified in the proxy string, it is
assumed to be 1080.
User and password that might be provided in the proxy string are
URL decoded by curl. This allows you to pass in special charac?
ters such as @ by using %40 or pass in a colon with %3a.
If --preproxy is provided several times, the last set value is
used.
Example:
curl --preproxy socks5://proxy.example -x http://http.example https://example.com
See also -x, --proxy and --socks5. Added in 7.52.0.
-#, --progress-bar
Make curl display transfer progress as a simple progress bar in?
stead of the standard, more informational, meter.
This progress bar draws a single line of '#' characters across
the screen and shows a percentage if the transfer size is known.
For transfers without a known size, there is a space ship
(-=o=-) that moves back and forth but only while data is being
transferred, with a set of flying hash sign symbols on top.
This option is global and does not need to be specified for each
use of --next.
Providing -#, --progress-bar multiple times has no extra effect.
Disable it again with --no-progress-bar.
Example:
curl -# -O https://example.com
See also --styled-output.
--proto-default
Tells curl to use protocol for any URL missing a scheme name.
An unknown or unsupported protocol causes error CURLE_UNSUP?
PORTED_PROTOCOL (1).
This option does not change the default proxy protocol (http).
Without this option set, curl guesses protocol based on the host
name, see --url for details.
If --proto-default is provided several times, the last set value
is used.
Example:
curl --proto-default https ftp.example.com
See also --proto and --proto-redir.
--proto-redir
Tells curl to limit what protocols it may use on redirect. Pro?
tocols denied by --proto are not overridden by this option. See
--proto for how protocols are represented.
Example, allow only HTTP and HTTPS on redirect:
curl --proto-redir -all,http,https http://example.com
By default curl only allows HTTP, HTTPS, FTP and FTPS on redi?
rects (added in 7.65.2). Specifying all or +all enables all pro?
tocols on redirects, which is not good for security.
If --proto-redir is provided several times, the last set value
is used.
Example:
curl --proto-redir =http,https https://example.com
See also --proto.
--proto
Tells curl to limit what protocols it may use for transfers.
Protocols are evaluated left to right, are comma separated, and
are each a protocol name or 'all', optionally prefixed by zero
or more modifiers. Available modifiers are:
+ Permit this protocol in addition to protocols already permit?
ted (this is the default if no modifier is used).
- Deny this protocol, removing it from the list of protocols
already permitted.
= Permit only this protocol (ignoring the list already permit?
ted), though subject to later modification by subsequent en?
tries in the comma separated list.
For example:
--proto -ftps uses the default protocols, but disables ftps
--proto -all,https,+http
only enables http and https
--proto =http,https
also only enables http and https
Unknown and disabled protocols produce a warning. This allows
scripts to safely rely on being able to disable potentially dan?
gerous protocols, without relying upon support for that protocol
being built into curl to avoid an error.
This option can be used multiple times, in which case the effect
is the same as concatenating the protocols into one instance of
the option.
If --proto is provided several times, the last set value is
used.
Example:
curl --proto =http,https,sftp https://example.com
See also --proto-redir and --proto-default.
--proxy-anyauth
Tells curl to pick a suitable authentication method when commu?
nicating with the given HTTP proxy. This might cause an extra
request/response round-trip.
Providing --proxy-anyauth multiple times has no extra effect.
Example:
curl --proxy-anyauth --proxy-user user:passwd -x proxy https://example.com
See also -x, --proxy, --proxy-basic and --proxy-digest.
--proxy-basic
Tells curl to use HTTP Basic authentication when communicating
with the given proxy. Use --basic for enabling HTTP Basic with a
remote host. Basic is the default authentication method curl
uses with proxies.
Providing --proxy-basic multiple times has no extra effect.
Example:
curl --proxy-basic --proxy-user user:passwd -x proxy https://example.com
See also -x, --proxy, --proxy-anyauth and --proxy-digest.
--proxy-ca-native
(TLS) Tells curl to use the CA store from the native operating
system to verify the HTTPS proxy. By default, curl uses a CA
store provided in a single file or directory, but when using
this option it interfaces the operating system's own vault.
This option only works for curl on Windows when built to use
OpenSSL. When curl on Windows is built to use Schannel, this
feature is implied and curl then only uses the native CA store.
curl built with wolfSSL also supports this option (added in
8.3.0).
Providing --proxy-ca-native multiple times has no extra effect.
Disable it again with --no-proxy-ca-native.
Example:
curl --ca-native https://example.com
See also --cacert, --capath and -k, --insecure. Added in 8.2.0.
--proxy-cacert
Same as --cacert but used in HTTPS proxy context.
If --proxy-cacert is provided several times, the last set value
is used.
Example:
curl --proxy-cacert CA-file.txt -x https://proxy https://example.com
See also --proxy-capath, --cacert, --capath and -x, --proxy.
Added in 7.52.0.
--proxy-capath
Same as --capath but used in HTTPS proxy context.
If --proxy-capath is provided several times, the last set value
is used.
Example:
curl --proxy-capath /local/directory -x https://proxy https://example.com
See also --proxy-cacert, -x, --proxy and --capath. Added in
7.52.0.
--proxy-cert-type
Same as --cert-type but used in HTTPS proxy context.
If --proxy-cert-type is provided several times, the last set
value is used.
Example:
curl --proxy-cert-type PEM --proxy-cert file -x https://proxy https://example.com
See also --proxy-cert. Added in 7.52.0.
--proxy-cert
Same as -E, --cert but used in HTTPS proxy context.
If --proxy-cert is provided several times, the last set value is
used.
Example:
curl --proxy-cert file -x https://proxy https://example.com
See also --proxy-cert-type. Added in 7.52.0.
--proxy-ciphers
Same as --ciphers but used in HTTPS proxy context.
Specifies which ciphers to use in the connection to the HTTPS
proxy. The list of ciphers must specify valid ciphers. Read up
on SSL cipher list details on this URL:
https://curl.se/docs/ssl-ciphers.html
If --proxy-ciphers is provided several times, the last set value
is used.
Example:
curl --proxy-ciphers ECDHE-ECDSA-AES256-CCM8 -x https://proxy https://example.com
See also --ciphers, --curves and -x, --proxy. Added in 7.52.0.
--proxy-crlfile
Same as --crlfile but used in HTTPS proxy context.
If --proxy-crlfile is provided several times, the last set value
is used.
Example:
curl --proxy-crlfile rejects.txt -x https://proxy https://example.com
See also --crlfile and -x, --proxy. Added in 7.52.0.
--proxy-digest
Tells curl to use HTTP Digest authentication when communicating
with the given proxy. Use --digest for enabling HTTP Digest with
a remote host.
Providing --proxy-digest multiple times has no extra effect.
Example:
curl --proxy-digest --proxy-user user:passwd -x proxy https://example.com
See also -x, --proxy, --proxy-anyauth and --proxy-basic.
--proxy-header
(HTTP) Extra header to include in the request when sending HTTP
to a proxy. You may specify any number of extra headers. This is
the equivalent option to -H, --header but is for proxy communi?
cation only like in CONNECT requests when you want a separate
header sent to the proxy to what is sent to the actual remote
host.
curl makes sure that each header you add/replace is sent with
the proper end-of-line marker, you should thus not add that as a
part of the header content: do not add newlines or carriage re?
turns, they only mess things up for you.
Headers specified with this option are not included in requests
that curl knows are not be sent to a proxy.
This option can take an argument in @filename style, which then
adds a header for each line in the input file (added in 7.55.0).
Using @- makes curl read the headers from stdin.
This option can be used multiple times to add/replace/remove
multiple headers.
--proxy-header can be used several times in a command line
Examples:
curl --proxy-header "X-First-Name: Joe" -x http://proxy https://example.com
curl --proxy-header "User-Agent: surprise" -x http://proxy https://example.com
curl --proxy-header "Host:" -x http://proxy https://example.com
See also -x, --proxy.
--proxy-http2
(HTTP) Tells curl to try negotiate HTTP version 2 with an HTTPS
proxy. The proxy might still only offer HTTP/1 and then curl
sticks to using that version.
This has no effect for any other kinds of proxies.
Providing --proxy-http2 multiple times has no extra effect.
Disable it again with --no-proxy-http2.
Example:
curl --proxy-http2 -x proxy https://example.com
See also -x, --proxy. --proxy-http2 requires that the underlying
libcurl was built to support HTTP/2. Added in 8.1.0.
--proxy-insecure
Same as -k, --insecure but used in HTTPS proxy context.
Providing --proxy-insecure multiple times has no extra effect.
Disable it again with --no-proxy-insecure.
Example:
curl --proxy-insecure -x https://proxy https://example.com
See also -x, --proxy and -k, --insecure. Added in 7.52.0.
--proxy-key-type
Same as --key-type but used in HTTPS proxy context.
If --proxy-key-type is provided several times, the last set
value is used.
Example:
curl --proxy-key-type DER --proxy-key here -x https://proxy https://example.com
See also --proxy-key and -x, --proxy. Added in 7.52.0.
--proxy-key
Same as --key but used in HTTPS proxy context.
If --proxy-key is provided several times, the last set value is
used.
Example:
curl --proxy-key here -x https://proxy https://example.com
See also --proxy-key-type and -x, --proxy. Added in 7.52.0.
--proxy-negotiate
Tells curl to use HTTP Negotiate (SPNEGO) authentication when
communicating with the given proxy. Use --negotiate for enabling
HTTP Negotiate (SPNEGO) with a remote host.
Providing --proxy-negotiate multiple times has no extra effect.
Example:
curl --proxy-negotiate --proxy-user user:passwd -x proxy https://example.com
See also --proxy-anyauth and --proxy-basic.
--proxy-ntlm
Tells curl to use HTTP NTLM authentication when communicating
with the given proxy. Use --ntlm for enabling NTLM with a remote
host.
Providing --proxy-ntlm multiple times has no extra effect.
Example:
curl --proxy-ntlm --proxy-user user:passwd -x http://proxy https://example.com
See also --proxy-negotiate and --proxy-anyauth.
--proxy-pass
Same as --pass but used in HTTPS proxy context.
If --proxy-pass is provided several times, the last set value is
used.
Example:
curl --proxy-pass secret --proxy-key here -x https://proxy https://example.com
See also -x, --proxy and --proxy-key. Added in 7.52.0.
--proxy-pinnedpubkey
(TLS) Tells curl to use the specified public key file (or
hashes) to verify the proxy. This can be a path to a file which
contains a single public key in PEM or DER format, or any number
of base64 encoded sha256 hashes preceded by 'sha256//' and sepa?
rated by ';'.
When negotiating a TLS or SSL connection, the server sends a
certificate indicating its identity. A public key is extracted
from this certificate and if it does not exactly match the pub?
lic key provided to this option, curl aborts the connection be?
fore sending or receiving any data.
If --proxy-pinnedpubkey is provided several times, the last set
value is used.
Examples:
curl --proxy-pinnedpubkey keyfile https://example.com
curl --proxy-pinnedpubkey 'sha256//ce118b51897f4452dc' https://example.com
See also --pinnedpubkey and -x, --proxy. Added in 7.59.0.
--proxy-service-name
This option allows you to change the service name for proxy ne?
gotiation.
If --proxy-service-name is provided several times, the last set
value is used.
Example:
curl --proxy-service-name "shrubbery" -x proxy https://example.com
See also --service-name and -x, --proxy.
--proxy-ssl-allow-beast
Same as --ssl-allow-beast but used in HTTPS proxy context.
Providing --proxy-ssl-allow-beast multiple times has no extra
effect. Disable it again with --no-proxy-ssl-allow-beast.
Example:
curl --proxy-ssl-allow-beast -x https://proxy https://example.com
See also --ssl-allow-beast and -x, --proxy. Added in 7.52.0.
--proxy-ssl-auto-client-cert
Same as --ssl-auto-client-cert but used in HTTPS proxy context.
Providing --proxy-ssl-auto-client-cert multiple times has no ex?
tra effect. Disable it again with
--no-proxy-ssl-auto-client-cert.
Example:
curl --proxy-ssl-auto-client-cert -x https://proxy https://example.com
See also --ssl-auto-client-cert and -x, --proxy. Added in
7.77.0.
--proxy-tls13-ciphers
(TLS) Specifies which cipher suites to use in the connection to
your HTTPS proxy when it negotiates TLS 1.3. The list of ciphers
suites must specify valid ciphers. Read up on TLS 1.3 cipher
suite details on this URL:
https://curl.se/docs/ssl-ciphers.html
This option is currently used only when curl is built to use
OpenSSL 1.1.1 or later. If you are using a different SSL backend
you can try setting TLS 1.3 cipher suites by using the
--proxy-ciphers option.
If --proxy-tls13-ciphers is provided several times, the last set
value is used.
Example:
curl --proxy-tls13-ciphers TLS_AES_128_GCM_SHA256 -x proxy https://example.com
See also --tls13-ciphers, --curves and --proxy-ciphers. Added in
7.61.0.
--proxy-tlsauthtype
Same as --tlsauthtype but used in HTTPS proxy context.
If --proxy-tlsauthtype is provided several times, the last set
value is used.
Example:
curl --proxy-tlsauthtype SRP -x https://proxy https://example.com
See also -x, --proxy and --proxy-tlsuser. Added in 7.52.0.
--proxy-tlspassword
Same as --tlspassword but used in HTTPS proxy context.
If --proxy-tlspassword is provided several times, the last set
value is used.
Example:
curl --proxy-tlspassword passwd -x https://proxy https://example.com
See also -x, --proxy and --proxy-tlsuser. Added in 7.52.0.
--proxy-tlsuser
Same as --tlsuser but used in HTTPS proxy context.
If --proxy-tlsuser is provided several times, the last set value
is used.
Example:
curl --proxy-tlsuser smith -x https://proxy https://example.com
See also -x, --proxy and --proxy-tlspassword. Added in 7.52.0.
--proxy-tlsv1
Same as -1, --tlsv1 but used in HTTPS proxy context.
Providing --proxy-tlsv1 multiple times has no extra effect.
Example:
curl --proxy-tlsv1 -x https://proxy https://example.com
See also -x, --proxy. Added in 7.52.0.
-U, --proxy-user
Specify the user name and password to use for proxy authentica?
tion.
If you use a Windows SSPI-enabled curl binary and do either Ne?
gotiate or NTLM authentication then you can tell curl to select
the user name and password from your environment by specifying a
single colon with this option: "-U :".
On systems where it works, curl hides the given option argument
from process listings. This is not enough to protect credentials
from possibly getting seen by other users on the same system as
they still are visible for a moment before cleared. Such sensi?
tive data should be retrieved from a file instead or similar and
never used in clear text in a command line.
If -U, --proxy-user is provided several times, the last set
value is used.
Example:
curl --proxy-user name:pwd -x proxy https://example.com
See also --proxy-pass.
-x, --proxy [protocol://]host[:port]
Use the specified proxy.
The proxy string can be specified with a protocol:// prefix. No
protocol specified or http:// it is treated as an HTTP proxy.
Use socks4://, socks4a://, socks5:// or socks5h:// to request a
specific SOCKS version to be used.
Unix domain sockets are supported for socks proxy. Set localhost
for the host part. e.g. socks5h://localhost/path/to/socket.sock
HTTPS proxy support works set with the https:// protocol prefix
for OpenSSL and GnuTLS (added in 7.52.0). It also works for
BearSSL, mbedTLS, rustls, Schannel, Secure Transport and wolfSSL
(added in 7.87.0).
Unrecognized and unsupported proxy protocols cause an error
(added in 7.52.0). Ancient curl versions ignored unknown
schemes and used http:// instead.
If the port number is not specified in the proxy string, it is
assumed to be 1080.
This option overrides existing environment variables that set
the proxy to use. If there is an environment variable setting a
proxy, you can set proxy to "" to override it.
All operations that are performed over an HTTP proxy are trans?
parently converted to HTTP. It means that certain protocol spe?
cific operations might not be available. This is not the case if
you can tunnel through the proxy, as one with the -p, --proxy?
tunnel option.
User and password that might be provided in the proxy string are
URL decoded by curl. This allows you to pass in special charac?
ters such as @ by using %40 or pass in a colon with %3a.
The proxy host can be specified the same way as the proxy envi?
ronment variables, including the protocol prefix (http://) and
the embedded user + password.
When a proxy is used, the active FTP mode as set with -P,
--ftp-port, cannot be used.
If -x, --proxy is provided several times, the last set value is
used.
Example:
curl --proxy http://proxy.example https://example.com
See also --socks5 and --proxy-basic.
--proxy1.0
Use the specified HTTP 1.0 proxy. If the port number is not
specified, it is assumed at port 1080.
The only difference between this and the HTTP proxy option -x,
--proxy, is that attempts to use CONNECT through the proxy spec?
ifies an HTTP 1.0 protocol instead of the default HTTP 1.1.
Providing --proxy1.0 multiple times has no extra effect.
Example:
curl --proxy1.0 -x http://proxy https://example.com
See also -x, --proxy, --socks5 and --preproxy.
-p, --proxytunnel
When an HTTP proxy is used -x, --proxy, this option makes curl
tunnel the traffic through the proxy. The tunnel approach is
made with the HTTP proxy CONNECT request and requires that the
proxy allows direct connect to the remote port number curl wants
to tunnel through to.
To suppress proxy CONNECT response headers when curl is set to
output headers use --suppress-connect-headers.
Providing -p, --proxytunnel multiple times has no extra effect.
Disable it again with --no-proxytunnel.
Example:
curl --proxytunnel -x http://proxy https://example.com
See also -x, --proxy.
--pubkey
(SFTP SCP) Public key file name. Allows you to provide your pub?
lic key in this separate file.
curl attempts to automatically extract the public key from the
private key file, so passing this option is generally not re?
quired. Note that this public key extraction requires libcurl to
be linked against a copy of libssh2 1.2.8 or higher that is it?
self linked against OpenSSL.
If --pubkey is provided several times, the last set value is
used.
Example:
curl --pubkey file.pub sftp://example.com/
See also --pass.
-Q, --quote
(FTP SFTP) Send an arbitrary command to the remote FTP or SFTP
server. Quote commands are sent BEFORE the transfer takes place
(just after the initial PWD command in an FTP transfer, to be
exact). To make commands take place after a successful transfer,
prefix them with a dash '-'.
(FTP only) To make commands be sent after curl has changed the
working directory, just before the file transfer command(s),
prefix the command with a '+'. This is not performed when a di?
rectory listing is performed.
You may specify any number of commands.
By default curl stops at first failure. To make curl continue
even if the command fails, prefix the command with an asterisk
(*). Otherwise, if the server returns failure for one of the
commands, the entire operation is aborted.
You must send syntactically correct FTP commands as RFC 959 de?
fines to FTP servers, or one of the commands listed below to
SFTP servers.
SFTP is a binary protocol. Unlike for FTP, curl interprets SFTP
quote commands itself before sending them to the server. File
names may be quoted shell-style to embed spaces or special char?
acters. Following is the list of all supported SFTP quote com?
mands:
"atime date file"
The atime command sets the last access time of the file
named by the file operand. The can be
all sorts of date strings, see the curl_getdate(3) man
page for date expression details. (Added in 7.73.0)
"chgrp group file"
The chgrp command sets the group ID of the file named by
the file operand to the group ID specified by the group
operand. The group operand is a decimal integer group ID.
"chmod mode file"
The chmod command modifies the file mode bits of the
specified file. The mode operand is an octal integer mode
number.
"chown user file"
The chown command sets the owner of the file named by the
file operand to the user ID specified by the user
operand. The user operand is a decimal integer user ID.
"ln source_file target_file"
The ln and symlink commands create a symbolic link at the
target_file location pointing to the source_file loca?
tion.
"mkdir directory_name"
The mkdir command creates the directory named by the di?
rectory_name operand.
"mtime date file"
The mtime command sets the last modification time of the
file named by the file operand. The can
be all sorts of date strings, see the curl_getdate(3) man
page for date expression details. (Added in 7.73.0)
"pwd" The pwd command returns the absolute path name of the
current working directory.
"rename source target"
The rename command renames the file or directory named by
the source operand to the destination path named by the
target operand.
"rm file"
The rm command removes the file specified by the file
operand.
"rmdir directory"
The rmdir command removes the directory entry specified
by the directory operand, provided it is empty.
"symlink source_file target_file"
See ln.
-Q, --quote can be used several times in a command line
Example:
curl --quote "DELE file" ftp://example.com/foo
See also -X, --request.
--random-file
Deprecated option. This option is ignored (added in 7.84.0).
Prior to that it only had an effect on curl if built to use old
versions of OpenSSL.
Specify the path name to file containing random data. The data
may be used to seed the random engine for SSL connections.
If --random-file is provided several times, the last set value
is used.
Example:
curl --random-file rubbish https://example.com
See also --egd-file.
-r, --range
(HTTP FTP SFTP FILE) Retrieve a byte range (i.e. a partial docu?
ment) from an HTTP/1.1, FTP or SFTP server or a local FILE.
Ranges can be specified in a number of ways.
0-499 specifies the first 500 bytes
500-999 specifies the second 500 bytes
-500 specifies the last 500 bytes
9500- specifies the bytes from offset 9500 and forward
0-0,-1 specifies the first and last byte only(*)(HTTP)
100-199,500-599
specifies two separate 100-byte ranges(*) (HTTP)
(*) = NOTE that this causes the server to reply with a multipart
response, which is returned as-is by curl! Parsing or otherwise
transforming this response is the responsibility of the caller.
Only digit characters (0-9) are valid in the 'start' and 'stop'
fields of the 'start-stop' range syntax. If a non-digit charac?
ter is given in the range, the server's response is unspecified,
depending on the server's configuration.
Many HTTP/1.1 servers do not have this feature enabled, so that
when you attempt to get a range, curl instead gets the whole
document.
FTP and SFTP range downloads only support the simple
'start-stop' syntax (optionally with one of the numbers omit?
ted). FTP use depends on the extended FTP command SIZE.
If -r, --range is provided several times, the last set value is
used.
Example:
curl --range 22-44 https://example.com
See also -C, --continue-at and -a, --append.
--rate
Specify the maximum transfer frequency you allow curl to use -
in number of transfer starts per time unit (sometimes called re?
quest rate). Without this option, curl starts the next transfer
as fast as possible.
If given several URLs and a transfer completes faster than the
allowed rate, curl waits until the next transfer is started to
maintain the requested rate. This option has no effect when -Z,
--parallel is used.
The request rate is provided as "N/U" where N is an integer num?
ber and U is a time unit. Supported units are 's' (second), 'm'
(minute), 'h' (hour) and 'd' /(day, as in a 24 hour unit). The
default time unit, if no "/U" is provided, is number of trans?
fers per hour.
If curl is told to allow 10 requests per minute, it does not
start the next request until 6 seconds have elapsed since the
previous transfer was started.
This function uses millisecond resolution. If the allowed fre?
quency is set more than 1000 per second, it instead runs unre?
stricted.
When retrying transfers, enabled with --retry, the separate
retry delay logic is used and not this setting.
This option is global and does not need to be specified for each
use of --next.
If --rate is provided several times, the last set value is used.
Examples:
curl --rate 2/s https://example.com ...
curl --rate 3/h https://example.com ...
curl --rate 14/m https://example.com ...
See also --limit-rate and --retry-delay. Added in 7.84.0.
--raw (HTTP) When used, it disables all internal HTTP decoding of con?
tent or transfer encodings and instead makes them passed on un?
altered, raw.
Providing --raw multiple times has no extra effect. Disable it
again with --no-raw.
Example:
curl --raw https://example.com
See also --tr-encoding.
-e, --referer
(HTTP) Sends the "Referrer Page" information to the HTTP server.
This can also be set with the -H, --header flag of course. When
used with -L, --location you can append ";auto" to the -e,
--referer URL to make curl automatically set the previous URL
when it follows a Location: header. The ";auto" string can be
used alone, even if you do not set an initial -e, --referer.
If -e, --referer is provided several times, the last set value
is used.
Examples:
curl --referer "https://fake.example" https://example.com
curl --referer "https://fake.example;auto" -L https://example.com
curl --referer ";auto" -L https://example.com
See also -A, --user-agent and -H, --header.
-J, --remote-header-name
(HTTP) This option tells the -O, --remote-name option to use the
server-specified Content-Disposition filename instead of ex?
tracting a filename from the URL. If the server-provided file
name contains a path, that is stripped off before the file name
is used.
The file is saved in the current directory, or in the directory
specified with --output-dir.
If the server specifies a file name and a file with that name
already exists in the destination directory, it is not overwrit?
ten and an error occurs - unless you allow it by using the
--clobber option. If the server does not specify a file name
then this option has no effect.
There is no attempt to decode %-sequences (yet) in the provided
file name, so this option may provide you with rather unexpected
file names.
This feature uses the name from the "filename" field, it does
not yet support the "filename*" field (filenames with explicit
character sets).
WARNING: Exercise judicious use of this option, especially on
Windows. A rogue server could send you the name of a DLL or
other file that could be loaded automatically by Windows or some
third party software.
Providing -J, --remote-header-name multiple times has no extra
effect. Disable it again with --no-remote-header-name.
Example:
curl -OJ https://example.com/file
See also -O, --remote-name.
--remote-name-all
This option changes the default action for all given URLs to be
dealt with as if -O, --remote-name were used for each one. So if
you want to disable that for a specific URL after --re?
mote-name-all has been used, you must use "-o -" or --no-re?
mote-name.
Providing --remote-name-all multiple times has no extra effect.
Disable it again with --no-remote-name-all.
Example:
curl --remote-name-all ftp://example.com/file1 ftp://example.com/file2
See also -O, --remote-name.
-O, --remote-name
Write output to a local file named like the remote file we get.
(Only the file part of the remote file is used, the path is cut
off.)
The file is saved in the current working directory. If you want
the file saved in a different directory, make sure you change
the current working directory before invoking curl with this op?
tion or use --output-dir.
The remote file name to use for saving is extracted from the
given URL, nothing else, and if it already exists it is over?
written. If you want the server to be able to choose the file
name refer to -J, --remote-header-name which can be used in ad?
dition to this option. If the server chooses a file name and
that name already exists it is not overwritten.
There is no URL decoding done on the file name. If it has %20 or
other URL encoded parts of the name, they end up as-is as file
name.
You may use this option as many times as the number of URLs you
have.
-O, --remote-name can be used several times in a command line
Example:
curl -O https://example.com/filename
See also --remote-name-all, --output-dir and -J, --re?
mote-header-name.
-R, --remote-time
Makes curl attempt to figure out the timestamp of the remote
file that is getting downloaded, and if that is available make
the local file get that same timestamp.
Providing -R, --remote-time multiple times has no extra effect.
Disable it again with --no-remote-time.
Example:
curl --remote-time -o foo https://example.com
See also -O, --remote-name and -z, --time-cond.
--remove-on-error
When curl returns an error when told to save output in a local
file, this option removes that saved file before exiting. This
prevents curl from leaving a partial file in the case of an er?
ror during transfer.
If the output is not a file, this option has no effect.
Providing --remove-on-error multiple times has no extra effect.
Disable it again with --no-remove-on-error.
Example:
curl --remove-on-error -o output https://example.com
See also -f, --fail. Added in 7.83.0.
--request-target
(HTTP) Tells curl to use an alternative "target" (path) instead
of using the path as provided in the URL. Particularly useful
when wanting to issue HTTP requests without leading slash or
other data that does not follow the regular URL pattern, like
"OPTIONS *".
curl passes on the verbatim string you give it its the request
without any filter or other safe guards. That includes white
space and control characters.
If --request-target is provided several times, the last set
value is used.
Example:
curl --request-target "*" -X OPTIONS https://example.com
See also -X, --request. Added in 7.55.0.
-X, --request
Change the method to use when starting the transfer.
curl passes on the verbatim string you give it its the request
without any filter or other safe guards. That includes white
space and control characters.
HTTP Specifies a custom request method to use when
communicating with the HTTP server. The specified
request method is used instead of the method oth?
erwise used (which defaults to GET). Read the
HTTP 1.1 specification for details and explana?
tions. Common additional HTTP requests include
PUT and DELETE, but related technologies like
WebDAV offers PROPFIND, COPY, MOVE and more.
Normally you do not need this option. All sorts
of GET, HEAD, POST and PUT requests are rather
invoked by using dedicated command line options.
This option only changes the actual word used in
the HTTP request, it does not alter the way curl
behaves. So for example if you want to make a
proper HEAD request, using -X HEAD does not suf?
fice. You need to use the -I, --head option.
The method string you set with -X, --request is
used for all requests, which if you for example
use -L, --location may cause unintended side-ef?
fects when curl does not change request method
according to the HTTP 30x response codes - and
similar.
FTP Specifies a custom FTP command to use instead of
LIST when doing file lists with FTP.
POP3 Specifies a custom POP3 command to use instead of
LIST or RETR.
IMAP Specifies a custom IMAP command to use instead of
LIST.
SMTP Specifies a custom SMTP command to use instead of
HELP or VRFY.
If -X, --request is provided several times, the last set value
is used.
Examples:
curl -X "DELETE" https://example.com
curl -X NLST ftp://example.com/
See also --request-target.
--resolve <[+]host:port:addr[,addr]...>
Provide a custom address for a specific host and port pair. Us?
ing this, you can make the curl requests(s) use a specified ad?
dress and prevent the otherwise normally resolved address to be
used. Consider it a sort of /etc/hosts alternative provided on
the command line. The port number should be the number used for
the specific protocol the host is used for. It means you need
several entries if you want to provide address for the same host
but different ports.
By specifying '*' as host you can tell curl to resolve any host
and specific port pair to the specified address. Wildcard is re?
solved last so any --resolve with a specific host and port is
used first.
The provided address set by this option is used even if -4,
--ipv4 or -6, --ipv6 is set to make curl use another IP version.
By prefixing the host with a '+' you can make the entry time out
after curl's default timeout (1 minute). Note that this only
makes sense for long running parallel transfers with a lot of
files. In such cases, if this option is used curl tries to re?
solve the host as it normally would once the timeout has ex?
pired.
Support for providing the IP address within [brackets] was added
in 7.57.0.
Support for providing multiple IP addresses per entry was added
in 7.59.0.
Support for resolving with wildcard was added in 7.64.0.
Support for the '+' prefix was was added in 7.75.0.
--resolve can be used several times in a command line
Example:
curl --resolve example.com:443:127.0.0.1 https://example.com
See also --connect-to and --alt-svc.
--retry-all-errors
Retry on any error. This option is used together with --retry.
This option is the "sledgehammer" of retrying. Do not use this
option by default (for example in your curlrc), there may be un?
intended consequences such as sending or receiving duplicate
data. Do not use with redirected input or output. You'd be much
better off handling your unique problems in shell script. Please
read the example below.
WARNING: For server compatibility curl attempts to retry failed
flaky transfers as close as possible to how they were started,
but this is not possible with redirected input or output. For
example, before retrying it removes output data from a failed
partial transfer that was written to an output file. However
this is not true of data redirected to a | pipe or > file, which
are not reset. We strongly suggest you do not parse or record
output via redirect in combination with this option, since you
may receive duplicate data.
By default curl does not return error for transfers with an HTTP
response code that indicates an HTTP error, if the transfer was
successful. For example, if a server replies 404 Not Found and
the reply is fully received then that is not an error. When
--retry is used then curl retries on some HTTP response codes
that indicate transient HTTP errors, but that does not include
most 4xx response codes such as 404. If you want to retry on all
response codes that indicate HTTP errors (4xx and 5xx) then com?
bine with -f, --fail.
Providing --retry-all-errors multiple times has no extra effect.
Disable it again with --no-retry-all-errors.
Example:
curl --retry 5 --retry-all-errors https://example.com
See also --retry. Added in 7.71.0.
--retry-connrefused
In addition to the other conditions, consider ECONNREFUSED as a
transient error too for --retry. This option is used together
with --retry.
Providing --retry-connrefused multiple times has no extra ef?
fect. Disable it again with --no-retry-connrefused.
Example:
curl --retry-connrefused --retry 7 https://example.com
See also --retry and --retry-all-errors. Added in 7.52.0.
--retry-delay
Make curl sleep this amount of time before each retry when a
transfer has failed with a transient error (it changes the de?
fault backoff time algorithm between retries). This option is
only interesting if --retry is also used. Setting this delay to
zero makes curl use the default backoff time.
If --retry-delay is provided several times, the last set value
is used.
Example:
curl --retry-delay 5 --retry 7 https://example.com
See also --retry.
--retry-max-time
The retry timer is reset before the first transfer attempt. Re?
tries are done as usual (see --retry) as long as the timer has
not reached this given limit. Notice that if the timer has not
reached the limit, the request is made and while performing, it
may take longer than this given time period. To limit a single
request's maximum time, use -m, --max-time. Set this option to
zero to not timeout retries.
If --retry-max-time is provided several times, the last set
value is used.
Example:
curl --retry-max-time 30 --retry 10 https://example.com
See also --retry.
--retry
If a transient error is returned when curl tries to perform a
transfer, it retries this number of times before giving up. Set?
ting the number to 0 makes curl do no retries (which is the de?
fault). Transient error means either: a timeout, an FTP 4xx re?
sponse code or an HTTP 408, 429, 500, 502, 503 or 504 response
code.
When curl is about to retry a transfer, it first waits one sec?
ond and then for all forthcoming retries it doubles the waiting
time until it reaches 10 minutes which then remains delay be?
tween the rest of the retries. By using --retry-delay you dis?
able this exponential backoff algorithm. See also
--retry-max-time to limit the total time allowed for retries.
curl complies with the Retry-After: response header if one was
present to know when to issue the next retry (added in 7.66.0).
If --retry is provided several times, the last set value is
used.
Example:
curl --retry 7 https://example.com
See also --retry-max-time.
--sasl-authzid
Use this authorization identity (authzid), during SASL PLAIN au?
thentication, in addition to the authentication identity (auth?
cid) as specified by -u, --user.
If the option is not specified, the server derives the authzid
from the authcid, but if specified, and depending on the server
implementation, it may be used to access another user's inbox,
that the user has been granted access to, or a shared mailbox
for example.
If --sasl-authzid is provided several times, the last set value
is used.
Example:
curl --sasl-authzid zid imap://example.com/
See also --login-options. Added in 7.66.0.
--sasl-ir
Enable initial response in SASL authentication.
Providing --sasl-ir multiple times has no extra effect. Disable
it again with --no-sasl-ir.
Example:
curl --sasl-ir imap://example.com/
See also --sasl-authzid.
--service-name
This option allows you to change the service name for SPNEGO.
If --service-name is provided several times, the last set value
is used.
Example:
curl --service-name sockd/server https://example.com
See also --negotiate and --proxy-service-name.
-S, --show-error
When used with -s, --silent, it makes curl show an error message
if it fails.
This option is global and does not need to be specified for each
use of --next.
Providing -S, --show-error multiple times has no extra effect.
Disable it again with --no-show-error.
Example:
curl --show-error --silent https://example.com
See also --no-progress-meter.
-s, --silent
Silent or quiet mode. Do not show progress meter or error mes?
sages. Makes Curl mute. It still outputs the data you ask for,
potentially even to the terminal/stdout unless you redirect it.
Use -S, --show-error in addition to this option to disable
progress meter but still show error messages.
Providing -s, --silent multiple times has no extra effect. Dis?
able it again with --no-silent.
Example:
curl -s https://example.com
See also -v, --verbose, --stderr and --no-progress-meter.
--socks4
Use the specified SOCKS4 proxy. If the port number is not speci?
fied, it is assumed at port 1080. Using this socket type make
curl resolve the host name and passing the address on to the
proxy.
To specify proxy on a unix domain socket, use localhost for
host, e.g. socks4://localhost/path/to/socket.sock
This option overrides any previous use of -x, --proxy, as they
are mutually exclusive.
This option is superfluous since you can specify a socks4 proxy
with -x, --proxy using a socks4:// protocol prefix.
--preproxy can be used to specify a SOCKS proxy at the same time
proxy is used with an HTTP/HTTPS proxy (added in 7.52.0). In
such a case, curl first connects to the SOCKS proxy and then
connects (through SOCKS) to the HTTP or HTTPS proxy.
If --socks4 is provided several times, the last set value is
used.
Example:
curl --socks4 hostname:4096 https://example.com
See also --socks4a, --socks5 and --socks5-hostname.
--socks4a
Use the specified SOCKS4a proxy. If the port number is not spec?
ified, it is assumed at port 1080. This asks the proxy to re?
solve the host name.
To specify proxy on a unix domain socket, use localhost for
host, e.g. socks4a://localhost/path/to/socket.sock
This option overrides any previous use of -x, --proxy, as they
are mutually exclusive.
This option is superfluous since you can specify a socks4a proxy
with -x, --proxy using a socks4a:// protocol prefix.
--preproxy can be used to specify a SOCKS proxy at the same time
-x, --proxy is used with an HTTP/HTTPS proxy (added in 7.52.0).
In such a case, curl first connects to the SOCKS proxy and then
connects (through SOCKS) to the HTTP or HTTPS proxy.
If --socks4a is provided several times, the last set value is
used.
Example:
curl --socks4a hostname:4096 https://example.com
See also --socks4, --socks5 and --socks5-hostname.
--socks5-basic
Tells curl to use username/password authentication when connect?
ing to a SOCKS5 proxy. The username/password authentication is
enabled by default. Use --socks5-gssapi to force GSS-API au?
thentication to SOCKS5 proxies.
Providing --socks5-basic multiple times has no extra effect.
Example:
curl --socks5-basic --socks5 hostname:4096 https://example.com
See also --socks5. Added in 7.55.0.
--socks5-gssapi-nec
As part of the GSS-API negotiation a protection mode is negoti?
ated. RFC 1961 says in section 4.3/4.4 it should be protected,
but the NEC reference implementation does not. The option
--socks5-gssapi-nec allows the unprotected exchange of the pro?
tection mode negotiation.
Providing --socks5-gssapi-nec multiple times has no extra ef?
fect. Disable it again with --no-socks5-gssapi-nec.
Example:
curl --socks5-gssapi-nec --socks5 hostname:4096 https://example.com
See also --socks5.
--socks5-gssapi-service
The default service name for a socks server is rcmd/server-fqdn.
This option allows you to change it.
If --socks5-gssapi-service is provided several times, the last
set value is used.
Example:
curl --socks5-gssapi-service sockd --socks5 hostname:4096 https://example.com
See also --socks5.
--socks5-gssapi
Tells curl to use GSS-API authentication when connecting to a
SOCKS5 proxy. The GSS-API authentication is enabled by default
(if curl is compiled with GSS-API support). Use --socks5-basic
to force username/password authentication to SOCKS5 proxies.
Providing --socks5-gssapi multiple times has no extra effect.
Disable it again with --no-socks5-gssapi.
Example:
curl --socks5-gssapi --socks5 hostname:4096 https://example.com
See also --socks5. Added in 7.55.0.
--socks5-hostname
Use the specified SOCKS5 proxy (and let the proxy resolve the
host name). If the port number is not specified, it is assumed
at port 1080.
To specify proxy on a unix domain socket, use localhost for
host, e.g. socks5h://localhost/path/to/socket.sock
This option overrides any previous use of -x, --proxy, as they
are mutually exclusive.
This option is superfluous since you can specify a socks5 host?
name proxy with -x, --proxy using a socks5h:// protocol prefix.
--preproxy can be used to specify a SOCKS proxy at the same time
-x, --proxy is used with an HTTP/HTTPS proxy (added in 7.52.0).
In such a case, curl first connects to the SOCKS proxy and then
connects (through SOCKS) to the HTTP or HTTPS proxy.
If --socks5-hostname is provided several times, the last set
value is used.
Example:
curl --socks5-hostname proxy.example:7000 https://example.com
See also --socks5 and --socks4a.
--socks5
Use the specified SOCKS5 proxy - but resolve the host name lo?
cally. If the port number is not specified, it is assumed at
port 1080.
To specify proxy on a unix domain socket, use localhost for
host, e.g. socks5://localhost/path/to/socket.sock
This option overrides any previous use of -x, --proxy, as they
are mutually exclusive.
This option is superfluous since you can specify a socks5 proxy
with -x, --proxy using a socks5:// protocol prefix.
--preproxy can be used to specify a SOCKS proxy at the same time
-x, --proxy is used with an HTTP/HTTPS proxy (added in 7.52.0).
In such a case, curl first connects to the SOCKS proxy and then
connects (through SOCKS) to the HTTP or HTTPS proxy.
This option (as well as --socks4) does not work with IPV6, FTPS
or LDAP.
If --socks5 is provided several times, the last set value is
used.
Example:
curl --socks5 proxy.example:7000 https://example.com
See also --socks5-hostname and --socks4a.
-Y, --speed-limit
If a transfer is slower than this given speed (in bytes per sec?
ond) for speed-time seconds it gets aborted. speed-time is set
with -y, --speed-time and is 30 if not set.
If -Y, --speed-limit is provided several times, the last set
value is used.
Example:
curl --speed-limit 300 --speed-time 10 https://example.com
See also -y, --speed-time, --limit-rate and -m, --max-time.
-y, --speed-time
If a transfer runs slower than speed-limit bytes per second dur?
ing a speed-time period, the transfer is aborted. If speed-time
is used, the default speed-limit is 1 unless set with -Y,
--speed-limit.
This option controls transfers (in both directions) but does not
affect slow connects etc. If this is a concern for you, try the
--connect-timeout option.
If -y, --speed-time is provided several times, the last set
value is used.
Example:
curl --speed-limit 300 --speed-time 10 https://example.com
See also -Y, --speed-limit and --limit-rate.
--ssl-allow-beast
This option tells curl to not work around a security flaw in the
SSL3 and TLS1.0 protocols known as BEAST. If this option is not
used, the SSL layer may use workarounds known to cause interop?
erability problems with some older SSL implementations.
WARNING: this option loosens the SSL security, and by using this
flag you ask for exactly that.
Providing --ssl-allow-beast multiple times has no extra effect.
Disable it again with --no-ssl-allow-beast.
Example:
curl --ssl-allow-beast https://example.com
See also --proxy-ssl-allow-beast and -k, --insecure.
--ssl-auto-client-cert
(Schannel) Tell libcurl to automatically locate and use a client
certificate for authentication, when requested by the server.
Since the server can request any certificate that supports
client authentication in the OS certificate store it could be a
privacy violation and unexpected.
Providing --ssl-auto-client-cert multiple times has no extra ef?
fect. Disable it again with --no-ssl-auto-client-cert.
Example:
curl --ssl-auto-client-cert https://example.com
See also --proxy-ssl-auto-client-cert. Added in 7.77.0.
--ssl-no-revoke
(Schannel) This option tells curl to disable certificate revoca?
tion checks. WARNING: this option loosens the SSL security, and
by using this flag you ask for exactly that.
Providing --ssl-no-revoke multiple times has no extra effect.
Disable it again with --no-ssl-no-revoke.
Example:
curl --ssl-no-revoke https://example.com
See also --crlfile.
--ssl-reqd
(FTP IMAP POP3 SMTP LDAP) Require SSL/TLS for the connection.
Terminates the connection if the transfer cannot be upgraded to
use SSL/TLS.
This option is handled in LDAP (added in 7.81.0). It is fully
supported by the OpenLDAP backend and rejected by the generic
ldap backend if explicit TLS is required.
This option is unnecessary if you use a URL scheme that in it?
self implies immediate and implicit use of TLS, like for FTPS,
IMAPS, POP3S, SMTPS and LDAPS. Such a transfer always fails if
the TLS handshake does not work.
This option was formerly known as --ftp-ssl-reqd.
Providing --ssl-reqd multiple times has no extra effect. Dis?
able it again with --no-ssl-reqd.
Example:
curl --ssl-reqd ftp://example.com
See also --ssl and -k, --insecure.
--ssl-revoke-best-effort
(Schannel) This option tells curl to ignore certificate revoca?
tion checks when they failed due to missing/offline distribution
points for the revocation check lists.
Providing --ssl-revoke-best-effort multiple times has no extra
effect. Disable it again with --no-ssl-revoke-best-effort.
Example:
curl --ssl-revoke-best-effort https://example.com
See also --crlfile and -k, --insecure. Added in 7.70.0.
--ssl (FTP IMAP POP3 SMTP LDAP) Warning: this is considered an inse?
cure option. Consider using --ssl-reqd instead to be sure curl
upgrades to a secure connection.
Try to use SSL/TLS for the connection. Reverts to a non-secure
connection if the server does not support SSL/TLS. See also
--ftp-ssl-control and --ssl-reqd for different levels of encryp?
tion required.
This option is handled in LDAP (added in 7.81.0). It is fully
supported by the OpenLDAP backend and ignored by the generic
ldap backend.
Please note that a server may close the connection if the nego?
tiation does not succeed.
This option was formerly known as --ftp-ssl. That option name
can still be used but might be removed in a future version.
Providing --ssl multiple times has no extra effect. Disable it
again with --no-ssl.
Example:
curl --ssl pop3://example.com/
See also --ssl-reqd, -k, --insecure and --ciphers.
-2, --sslv2
(SSL) This option previously asked curl to use SSLv2, but is now
ignored (added in 7.77.0). SSLv2 is widely considered insecure
(see RFC 6176).
Providing -2, --sslv2 multiple times has no extra effect.
Example:
curl --sslv2 https://example.com
See also --http1.1 and --http2. -2, --sslv2 requires that the
underlying libcurl was built to support TLS. This option is mu?
tually exclusive to -3, --sslv3 and -1, --tlsv1 and --tlsv1.1
and --tlsv1.2.
-3, --sslv3
(SSL) This option previously asked curl to use SSLv3, but is now
ignored (added in 7.77.0). SSLv3 is widely considered insecure
(see RFC 7568).
Providing -3, --sslv3 multiple times has no extra effect.
Example:
curl --sslv3 https://example.com
See also --http1.1 and --http2. -3, --sslv3 requires that the
underlying libcurl was built to support TLS. This option is mu?
tually exclusive to -2, --sslv2 and -1, --tlsv1 and --tlsv1.1
and --tlsv1.2.
--stderr
Redirect all writes to stderr to the specified file instead. If
the file name is a plain '-', it is instead written to stdout.
This option is global and does not need to be specified for each
use of --next.
If --stderr is provided several times, the last set value is
used.
Example:
curl --stderr output.txt https://example.com
See also -v, --verbose and -s, --silent.
--styled-output
Enables the automatic use of bold font styles when writing HTTP
headers to the terminal. Use --no-styled-output to switch them
off.
Styled output requires a terminal that supports bold fonts. This
feature is not present on curl for Windows due to lack of this
capability.
This option is global and does not need to be specified for each
use of --next.
Providing --styled-output multiple times has no extra effect.
Disable it again with --no-styled-output.
Example:
curl --styled-output -I https://example.com
See also -I, --head and -v, --verbose. Added in 7.61.0.
--suppress-connect-headers
When -p, --proxytunnel is used and a CONNECT request is made do
not output proxy CONNECT response headers. This option is meant
to be used with -D, --dump-header or -i, --include which are
used to show protocol headers in the output. It has no effect on
debug options such as -v, --verbose or --trace, or any statis?
tics.
Providing --suppress-connect-headers multiple times has no extra
effect. Disable it again with --no-suppress-connect-headers.
Example:
curl --suppress-connect-headers --include -x proxy https://example.com
See also -D, --dump-header, -i, --include and -p, --proxytunnel.
Added in 7.54.0.
--tcp-fastopen
Enable use of TCP Fast Open (RFC 7413). TCP Fast Open is a TCP
extension that allows data to get sent earlier over the connec?
tion (before the final handshake ACK) if the client and server
have been connected previously.
Providing --tcp-fastopen multiple times has no extra effect.
Disable it again with --no-tcp-fastopen.
Example:
curl --tcp-fastopen https://example.com
See also --false-start.
--tcp-nodelay
Turn on the TCP_NODELAY option. See the curl_easy_setopt(3) man
page for details about this option.
curl sets this option by default and you need to explicitly
switch it off if you do not want it on (added in 7.50.2).
Providing --tcp-nodelay multiple times has no extra effect.
Disable it again with --no-tcp-nodelay.
Example:
curl --tcp-nodelay https://example.com
See also -N, --no-buffer.
-t, --telnet-option
Pass options to the telnet protocol. Supported options are:
TTYPE= Sets the terminal type.
XDISPLOC= Sets the X display location.
NEW_ENV= Sets an environment variable.
-t, --telnet-option can be used several times in a command line
Example:
curl -t TTYPE=vt100 telnet://example.com/
See also -K, --config.
--tftp-blksize
(TFTP) Set the TFTP BLKSIZE option (must be >512). This is the
block size that curl tries to use when transferring data to or
from a TFTP server. By default 512 bytes are used.
If --tftp-blksize is provided several times, the last set value
is used.
Example:
curl --tftp-blksize 1024 tftp://example.com/file
See also --tftp-no-options.
--tftp-no-options
(TFTP) Tells curl not to send TFTP options requests.
This option improves interop with some legacy servers that do
not acknowledge or properly implement TFTP options. When this
option is used --tftp-blksize is ignored.
Providing --tftp-no-options multiple times has no extra effect.
Disable it again with --no-tftp-no-options.
Example:
curl --tftp-no-options tftp://192.168.0.1/
See also --tftp-blksize.
-z, --time-cond