Skip to content
curl.1 85.4 KiB
Newer Older
.IP "-P, --ftp-port <address>"
(FTP) Reverses the default initiator/listener roles when connecting with
FTP. This switch makes curl use active mode. In practice, 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. <address> should be one of:
.RS
.IP interface
i.e "eth0" to specify which interface's IP address you want to use (Unix only)
.IP "IP address"
i.e "192.168.10.1" to specify the exact IP address
.IP "host name"
i.e "my.host.domain" to specify the machine
.IP "-"
make curl pick the same IP address that is already used for the control
connection
.RE

If this option is used several times, the last one will be used. Disable the
use of PORT with \fI--ftp-pasv\fP. Disable the attempt to use the EPRT command
instead of PORT by using \fI--disable-eprt\fP. EPRT is really PORT++.

Starting in 7.19.5, you can append \&":[start]-[end]\&" to the right of the
address, 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.
(SSL/SSH) Passphrase for the private key

If this option is used several times, the last one will be used.
(HTTP) Tells curl to respect RFC 2616/10.3.2 and not convert POST requests
into GET requests when following a 301 redirection. The non-RFC behaviour 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 \fI-L, --location\fP
(HTTP) Tells curl to respect RFC 2616/10.3.2 and not convert POST requests
into GET requests when following a 302 redirection. The non-RFC behaviour 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 \fI-L, --location\fP
.IP "--proto <protocols>"
Tells curl to use the listed protocols for its initial retrieval. 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:
.RS
.TP 3
.B +
Permit this protocol in addition to protocols already permitted (this is
the default if no modifier is used).
.TP
.B -
Deny this protocol, removing it from the list of protocols already permitted.
.TP
.B =
Permit only this protocol (ignoring the list already permitted), though
subject to later modification by subsequent entries in the comma separated
list.
.RE
.IP
For example:
.RS
.TP 15
.B --proto -ftps
uses the default protocols, but disables ftps
.TP
.B  --proto -all,https,+http
only enables http and https
.TP
.B --proto =http,https
also only enables http and https
.RE
.IP
Unknown protocols produce a warning. This allows scripts to safely rely on
being able to disable potentially dangerous 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.

(Added in 7.20.2)
.IP "--proto-redir <protocols>"
Tells curl to use the listed protocols after a redirect. See --proto for
how protocols are represented.

(Added in 7.20.2)
Daniel Stenberg's avatar
Daniel Stenberg committed
.IP "--proxy-anyauth"
Tells curl to pick a suitable authentication method when communicating with
the given proxy. This might cause an extra request/response round-trip. (Added
.IP "--proxy-basic"
Tells curl to use HTTP Basic authentication when communicating with the given
proxy. Use \fI--basic\fP for enabling HTTP Basic with a remote host. Basic is
the default authentication method curl uses with proxies.
.IP "--proxy-digest"
Tells curl to use HTTP Digest authentication when communicating with the given
proxy. Use \fI--digest\fP for enabling HTTP Digest with a remote host.
.IP "--proxy-negotiate"
Tells curl to use HTTP Negotiate authentication when communicating
with the given proxy. Use \fI--negotiate\fP for enabling HTTP Negotiate
Tells curl to use HTTP NTLM authentication when communicating with the given
proxy. Use \fI--ntlm\fP for enabling NTLM with a remote host.
.IP "--proxy1.0 <proxyhost[:port]>"
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 (\fI-x, --proxy\fP),
is that attempts to use CONNECT through the proxy will specify an HTTP 1.0
protocol instead of the default HTTP 1.1.
.IP "--pubkey <key>"
(SSH) Public key file name. Allows you to provide your public key in this
separate file.

If this option is used several times, the last one will be used.
If used as the first parameter on the command line, the \fIcurlrc\fP config
file will not be read and used. See the \fI-K, --config\fP for details on the
.IP "-Q, --quote <command>"
(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 '-'.  To make commands be sent
after curl has changed the working directory, just before the transfer
command(s), prefix the command with a '+' (this is only supported for
FTP). You may specify any number of commands. If the server returns failure
for one of the commands, the entire operation will be aborted. You must send
syntactically correct FTP commands as RFC 959 defines to FTP servers, or one
of the commands listed below to SFTP servers.  This option can be used
Ant Bryan's avatar
Ant Bryan committed
multiple times. When speaking to an FTP server, prefix the command with an
asterisk (*) to make curl continue even if the command fails as by default
curl will stop at first failure.
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 characters.  Following is the list of
all supported SFTP quote commands:
.RS
.IP "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.
.IP "chmod mode file"
The chmod command modifies the file mode bits of the specified file. The
mode operand is an octal integer mode number.
.IP "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.
.IP "ln source_file target_file"
The ln and symlink commands create a symbolic link at the target_file location
pointing to the source_file location.
.IP "mkdir directory_name"
The mkdir command creates the directory named by the directory_name operand.
.IP "pwd"
The pwd command returns the absolute pathname of the current working directory.
.IP "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.
.IP "rm file"
The rm command removes the file specified by the file operand.
.IP "rmdir directory"
The rmdir command removes the directory entry specified by the directory
operand, provided it is empty.
.IP "symlink source_file target_file"
See ln.
.RE
.IP "-r, --range <range>"
(HTTP/FTP/SFTP/FILE) Retrieve a byte range (i.e a partial document) from a
HTTP/1.1, FTP or SFTP server or a local FILE. Ranges can be specified
in a number of ways.
.RS
.TP 10
.B 0-499
specifies the first 500 bytes
.TP
.B 500-999
specifies the second 500 bytes
.TP
.B -500
specifies the last 500 bytes
.TP
specifies the bytes from offset 9500 and forward
.TP
.B 0-0,-1
specifies the first and last byte only(*)(H)
.TP
.B 500-700,600-799
specifies 300 bytes from offset 500(H)
.TP
.B 100-199,500-599
specifies two separate 100-byte ranges(*)(H)
.RE

(*) = NOTE that this will cause the server to reply with a multipart
response!

Only digit characters (0-9) are valid in the 'start' and 'stop' fields of the
\&'start-stop' range syntax. If a non-digit character is given in the range,
the server's response will be unspecified, depending on the server's
configuration.
You should also be aware that many HTTP/1.1 servers do not have this feature
enabled, so that when you attempt to get a range, you'll instead get the whole
document.

FTP and SFTP range downloads only support the simple 'start-stop' syntax
(optionally with one of the numbers omitted). FTP use depends on the extended
FTP command SIZE.
Daniel Stenberg's avatar
Daniel Stenberg committed
If this option is used several times, the last one will be used.
.IP "-R, --remote-time"
When used, this will make curl attempt to figure out the timestamp of the
Daniel Stenberg's avatar
Daniel Stenberg committed
remote file, and if that is available make the local file get that same
timestamp.
.IP "--random-file <file>"
(SSL) Specify the path name to file containing what will be considered as
random data. The data is used to seed the random engine for SSL connections.
See also the \fI--egd-file\fP option.
.IP "--raw"
Ant Bryan's avatar
Ant Bryan committed
(HTTP) When used, it disables all internal HTTP decoding of content or transfer
encodings and instead makes them passed on unaltered, raw. (Added in 7.16.2)
.IP "--remote-name-all"
This option changes the default action for all given URLs to be dealt with as
if \fI-O, --remote-name\fP were used for each one. So if you want to disable
that for a specific URL after \fI--remote-name-all\fP has been used, you must
use "-o -" or \fI--no-remote-name\fP. (Added in 7.19.0)
.IP "--resolve <host:port:address>"
Provide a custom address for a specific host and port pair. Using this, you
can make the curl requests(s) use a specified address 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 will be used for. It means
you need several entries if you want to provide address for the same host but
different ports.

This option can be used many times to add many host names to resolve.

(Added in 7.21.3)
.IP "--retry <num>"
If a transient error is returned when curl tries to perform a transfer, it
will retry this number of times before giving up. Setting the number to 0
Daniel Stenberg's avatar
Daniel Stenberg committed
makes curl do no retries (which is the default). Transient error means either:
a timeout, an FTP 4xx response code or an HTTP 5xx response code.

When curl is about to retry a transfer, it will first wait one second and then
for all forthcoming retries it will double the waiting time until it reaches
Daniel Stenberg's avatar
Daniel Stenberg committed
10 minutes which then will be the delay between the rest of the retries.  By
using \fI--retry-delay\fP you disable this exponential backoff algorithm. See
also \fI--retry-max-time\fP to limit the total time allowed for
If this option is used several times, the last one will be used.
.IP "--retry-delay <seconds>"
Make curl sleep this amount of time before each retry when a transfer has
failed with a transient error (it changes the default backoff time algorithm
Daniel Stenberg's avatar
Daniel Stenberg committed
between retries). This option is only interesting if \fI--retry\fP is also
used. Setting this delay to zero will make curl use the default backoff time.
If this option is used several times, the last one will be used.
Daniel Stenberg's avatar
Daniel Stenberg committed
.IP "--retry-max-time <seconds>"
The retry timer is reset before the first transfer attempt. Retries will be
done as usual (see \fI--retry\fP) as long as the timer hasn't reached this
given limit. Notice that if the timer hasn't reached the limit, the request
will be made and while performing, it may take longer than this given time
period. To limit a single request\'s maximum time, use \fI-m, --max-time\fP.
Set this option to zero to not timeout retries. (Added in 7.12.3)
If this option is used several times, the last one will be used.
.IP "-s, --silent"
Silent or quiet mode. Don't show progress meter or error messages.  Makes
.IP "-S, --show-error"
Ant Bryan's avatar
Ant Bryan committed
When used with \fI-s\fP it makes curl show an error message if it fails.
.IP "--ssl"
(FTP, POP3, IMAP, SMTP) Try to use SSL/TLS for the connection.  Reverts to a
non-secure connection if the server doesn't support SSL/TLS.  See also
\fI--ftp-ssl-control\fP and \fI--ssl-reqd\fP for different levels of
encryption required. (Added in 7.20.0)

This option was formerly known as \fI--ftp-ssl\fP (Added in 7.11.0). That
option name can still be used but will be removed in a future version.
.IP "--ssl-reqd"
(FTP, POP3, IMAP, SMTP) Require SSL/TLS for the connection.  Terminates the
connection if the server doesn't support SSL/TLS. (Added in 7.20.0)

This option was formerly known as \fI--ftp-ssl-reqd\fP (added in 7.15.5). That
option name can still be used but will be removed in a future version.
Daniel Stenberg's avatar
Daniel Stenberg committed
.IP "--ssl-allow-beast"
(SSL) This option tells curl to not work around a security flaw in the SSL3
and TLS1.0 protocols known as BEAST.  If this option isn't used, the SSL layer
may use work-arounds known to cause interoperability problems with some older
SSL implementations. WARNING: this option loosens the SSL security, and by
using this flag you ask for exactly that.  (Added in 7.25.0)
.IP "--socks4 <host[:port]>"
Use the specified SOCKS4 proxy. If the port number is not specified, it is
assumed at port 1080. (Added in 7.15.2)

This option overrides any previous use of \fI-x, --proxy\fP, as they are
Since 7.21.7, this option is superfluous since you can specify a socks4 proxy
with \fI-x, --proxy\fP using a socks4:// protocol prefix.

If this option is used several times, the last one will be used.
.IP "--socks4a <host[:port]>"
Use the specified SOCKS4a proxy. If the port number is not specified, it is
assumed at port 1080. (Added in 7.18.0)
This option overrides any previous use of \fI-x, --proxy\fP, as they are
Since 7.21.7, this option is superfluous since you can specify a socks4a proxy
with \fI-x, --proxy\fP using a socks4a:// protocol prefix.

If this option is used several times, the last one will be used.
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. (Added in
This option overrides any previous use of \fI-x, --proxy\fP, as they are
Since 7.21.7, this option is superfluous since you can specify a socks5
hostname proxy with \fI-x, --proxy\fP using a socks5h:// protocol prefix.
If this option is used several times, the last one will be used. (This option
was previously wrongly documented and used as --socks without the number
appended.)
Use the specified SOCKS5 proxy - but resolve the host name locally. If the
port number is not specified, it is assumed at port 1080.
Daniel Stenberg's avatar
Daniel Stenberg committed

This option overrides any previous use of \fI-x, --proxy\fP, as they are
Daniel Stenberg's avatar
Daniel Stenberg committed
mutually exclusive.

Since 7.21.7, this option is superfluous since you can specify a socks5 proxy
with \fI-x, --proxy\fP using a socks5:// protocol prefix.

If this option is used several times, the last one will be used. (This option
was previously wrongly documented and used as --socks without the number
appended.)

This option (as well as \fI--socks4\fP) does not work with IPV6, FTPS or LDAP.
.IP "--socks5-gssapi-service <servicename>"
The default service name for a socks server is rcmd/server-fqdn. This option
allows you to change it.

Daniel Stenberg's avatar
Daniel Stenberg committed
Examples: --socks5 proxy-name \fI--socks5-gssapi-service\fP sockd would use
sockd/proxy-name --socks5 proxy-name \fI--socks5-gssapi-service\fP
sockd/real-name would use sockd/real-name for cases where the proxy-name does
not match the principal name.  (Added in 7.19.4).
.IP "--socks5-gssapi-nec"
Brad Hards's avatar
Brad Hards committed
As part of the gssapi negotiation a protection mode is negotiated. RFC 1961
says in section 4.3/4.4 it should be protected, but the NEC reference
implementation does not.  The option \fI--socks5-gssapi-nec\fP allows the
unprotected exchange of the protection mode negotiation. (Added in 7.19.4).
.IP "--stderr <file>"
Redirect all writes to stderr to the specified file instead. If the file name
is a plain '-', it is instead written to stdout.

If this option is used several times, the last one will be used.
.IP "-t, --telnet-option <OPT=val>"
Pass options to the telnet protocol. Supported options are:

TTYPE=<term> Sets the terminal type.

XDISPLOC=<X display> Sets the X display location.

NEW_ENV=<var,val> Sets an environment variable.
.IP "-T, --upload-file <file>"
This transfers the specified local file to the remote URL. If there is no file
part in the specified URL, Curl will append the local file name. NOTE that you
must use a trailing / on the last directory to really prove to Curl that there
is no file name or curl will think that your last directory name is the remote
file name to use. That will most likely cause the upload operation to fail. If
Ant Bryan's avatar
Ant Bryan committed
this is used on an HTTP(S) server, the PUT command will be used.
Use the file name "-" (a single dash) to use stdin instead of a given file.
Alternately, the file name "." (a single period) may be specified instead
of "-" to use stdin in non-blocking mode to allow reading server output
while stdin is being uploaded.
You can specify one -T for each URL on the command line. Each -T + URL pair
specifies what to upload and to where. curl also supports "globbing" of the -T
argument, meaning that you can upload multiple files to a single URL by using
the same URL globbing style supported in the URL, like this:

curl -T "{file1,file2}" http://www.uploadtothissite.com

or even

curl -T "img[1-1000].png" ftp://ftp.picturemania.com/upload/
.IP "--tcp-nodelay"
Turn on the TCP_NODELAY option. See the \fIcurl_easy_setopt(3)\fP man page for
details about this option. (Added in 7.11.2)
.IP "--tftp-blksize <value>"
(TFTP) Set TFTP BLKSIZE option (must be >512). This is the block size that
curl will try to use when transferring data to or from a TFTP server. By
default 512 bytes will be used.

If this option is used several times, the last one will be used.

(Added in 7.20.0)
.IP "--tlsauthtype <authtype>"
Set TLS authentication type. Currently, the only supported option is "SRP",
for TLS-SRP (RFC 5054). If \fI--tlsuser\fP and \fI--tlspassword\fP are
specified but \fI--tlsauthtype\fP is not, then this option defaults to "SRP".
(Added in 7.21.4)
.IP "--tlsuser <user>"
Set username for use with the TLS authentication method specified with
\fI--tlsauthtype\fP. Requires that \fI--tlspassword\fP also be set.  (Added in
7.21.4)
.IP "--tlspassword <password>"
Set password for use with the TLS authentication method specified with
\fI--tlsauthtype\fP. Requires that \fI--tlsuser\fP also be set.  (Added in
7.21.4)
.IP "--tr-encoding"
(HTTP) Request a compressed Transfer-Encoding response using one of the
algorithms curl supports, and uncompress the data while receiving it.

(Added in 7.21.6)
.IP "--trace <file>"
Enables a full trace dump of all incoming and outgoing data, including
descriptive information, to the given output file. Use "-" as filename to have
the output sent to stdout.

This option overrides previous uses of \fI-v, --verbose\fP or
If this option is used several times, the last one will be used.
.IP "--trace-ascii <file>"
Enables a full trace dump of all incoming and outgoing data, including
descriptive information, to the given output file. Use "-" as filename to have
the output sent to stdout.

This is very similar to \fI--trace\fP, but leaves out the hex part and only
shows the ASCII part of the dump. It makes smaller output that might be easier
to read for untrained humans.
This option overrides previous uses of \fI-v, --verbose\fP or \fI--trace\fP.
If this option is used several times, the last one will be used.
.IP "--trace-time"
Prepends a time stamp to each trace or verbose line that curl displays.
.IP "-u, --user <user:password>"
Specify the user name and password to use for server authentication. Overrides
\fI-n, --netrc\fP and \fI--netrc-optional\fP.
If you just give the user name (without entering a colon) curl will prompt for
a password.

If you use an SSPI-enabled curl binary and do NTLM authentication, you can
force curl to pick up the user name and password from your environment by
simply specifying a single colon with this option: "-u :".

Daniel Stenberg's avatar
Daniel Stenberg committed
If this option is used several times, the last one will be used.
.IP "-U, --proxy-user <user:password>"
Specify the user name and password to use for proxy authentication.
If you use an SSPI-enabled curl binary and do NTLM authentication, you can
force curl to pick up the user name and password from your environment by
simply specifying a single colon with this option: "-U :".

Daniel Stenberg's avatar
Daniel Stenberg committed
If this option is used several times, the last one will be used.
Daniel Stenberg's avatar
Daniel Stenberg committed
.IP "--url <URL>"
Specify a URL to fetch. This option is mostly handy when you want to specify
URL(s) in a config file.

This option may be used any number of times. To control where this URL is
written, use the \fI-o, --output\fP or the \fI-O, --remote-name\fP options.
.IP "-v, --verbose"
Makes the fetching more verbose/talkative. Mostly useful for debugging. A line
starting with '>' means "header data" sent by curl, '<' means "header data"
received by curl that is hidden in normal cases, and a line starting with '*'
means additional info provided by curl.
Note that if you only want HTTP headers in the output, \fI-i, --include\fP
might be the option you're looking for.
If you think this option still doesn't give you enough details, consider using
\fI--trace\fP or \fI--trace-ascii\fP instead.

This option overrides previous uses of \fI--trace-ascii\fP or \fI--trace\fP.
Use \fI-s, --silent\fP to make curl quiet.
.IP "-w, --write-out <format>"
Defines what to display on stdout after a completed and successful
operation. The format is a string that may contain plain text mixed with any
number of variables. The string can be specified as "string", to get read from
a particular file you specify it "@filename" and to tell curl to read the
format from stdin you write "@-".

The variables present in the output format will be substituted by the value or
text that curl thinks fit, as described below. All variables are specified
as %{variable_name} and to output a normal % you just write them as
%%. You can output a newline by using \\n, a carriage return with \\r and a tab
space with \\t.

.B NOTE:
The %-symbol is a special symbol in the win32-environment, where all
occurrences of % must be doubled when using this option.

The variables available are:
.B content_type
The Content-Type of the requested document, if there was any.
.B filename_effective
The ultimate filename that curl writes out to. This is only meaningful if curl
is told to write to a file with the \fI--remote-name\fP or \fI--output\fP
option. It's most useful in combination with the \fI--remote-header-name\fP
option. (Added in 7.25.1)
.B ftp_entry_path
The initial path curl ended up in when logging on to the remote FTP
server. (Added in 7.15.4)
.TP
.B http_code
The numerical response code that was found in the last retrieved HTTP(S) or
FTP(s) transfer. In 7.18.2 the alias \fBresponse_code\fP was added to show the
same info.
.B http_connect
The numerical code that was found in the last response (from a proxy) to a
curl CONNECT request. (Added in 7.12.4)
.TP
.B local_ip
The IP address of the local end of the most recently done connection - can be
either IPv4 or IPv6 (Added in 7.29.0)
.TP
.B local_port
The local port number of the most recently done connection (Added in 7.29.0)
.TP
.B num_connects
Number of new connects made in the recent transfer. (Added in 7.12.3)
.B num_redirects
Number of redirects that were followed in the request. (Added in 7.12.3)
.B redirect_url
When an HTTP request was made without -L to follow redirects, this variable
will show the actual URL a redirect \fIwould\fP take you to. (Added in 7.18.2)
.B remote_ip
The remote IP address of the most recently done connection - can be either
IPv4 or IPv6 (Added in 7.29.0)
.TP
.B remote_port
The remote port number of the most recently done connection (Added in 7.29.0)
.TP
.B size_download
The total amount of bytes that were downloaded.
.TP
.B size_header
The total amount of bytes of the downloaded headers.
.TP
.B size_request
The total amount of bytes that were sent in the HTTP request.
.TP
.B size_upload
The total amount of bytes that were uploaded.
.TP
.B speed_download
The average download speed that curl measured for the complete download. Bytes
per second.
.TP
.B speed_upload
The average upload speed that curl measured for the complete upload. Bytes per
second.
.B ssl_verify_result
The result of the SSL peer certificate verification that was requested. 0
means the verification was successful. (Added in 7.19.0)
Daniel Stenberg's avatar
Daniel Stenberg committed
.TP
.B time_appconnect
The time, in seconds, it took from the start until the SSL/SSH/etc
connect/handshake to the remote host was completed. (Added in 7.19.0)
.B time_connect
The time, in seconds, it took from the start until the TCP connect to the
remote host (or proxy) was completed.
.B time_namelookup
The time, in seconds, it took from the start until the name resolving was
completed.
.B time_pretransfer
The time, in seconds, it took from the start until the file transfer was just
about to begin. This includes all pre-transfer commands and negotiations that
are specific to the particular protocol(s) involved.
.B time_redirect
The time, in seconds, it took for all redirection steps include name lookup,
connect, pretransfer and transfer before the final transaction was
started. time_redirect shows the complete execution time for multiple
redirections. (Added in 7.12.3)
.TP
.B time_starttransfer
The time, in seconds, it took from the start until the first byte was just
about to be transferred. This includes time_pretransfer and also the time the
server needed to calculate the result.
.TP
.B time_total
The total time, in seconds, that the full operation lasted. The time will be
displayed with millisecond resolution.
.TP
.B url_effective
The URL that was fetched last. This is most meaningful if you've told curl
to follow location: headers.
Daniel Stenberg's avatar
Daniel Stenberg committed
If this option is used several times, the last one will be used.
.IP "-x, --proxy <[protocol://][user:password@]proxyhost[:port]>"
Use the specified HTTP proxy. If the port number is not specified, it is
assumed at port 1080.
This option overrides existing environment variables that set the proxy to
Daniel Stenberg's avatar
Daniel Stenberg committed
use. If there's an environment variable setting a proxy, you can set proxy to
\&"" to override it.
Ant Bryan's avatar
Ant Bryan committed
All operations that are performed over an HTTP proxy will transparently be
converted to HTTP. It means that certain protocol specific operations might
not be available. This is not the case if you can tunnel through the proxy, as
one with the \fI-p, --proxytunnel\fP option.
User and password that might be provided in the proxy string are URL decoded
by curl. This allows you to pass in special characters such as @ by using %40
or pass in a colon with %3a.
The proxy host can be specified the exact same way as the proxy environment
variables, including the protocol prefix (http://) and the embedded user +
password.
From 7.21.7, the proxy string may be specified with a protocol:// prefix to
specify alternative proxy protocols. Use socks4://, socks4a://, socks5:// or
socks5h:// to request the specific SOCKS version to be used. No protocol
specified, http:// and all others will be treated as HTTP proxies.
Daniel Stenberg's avatar
Daniel Stenberg committed
If this option is used several times, the last one will be used.
.IP "-X, --request <command>"
(HTTP) Specifies a custom request method to use when communicating with the
HTTP server.  The specified request will be used instead of the method
otherwise used (which defaults to GET). Read the HTTP 1.1 specification for
details and explanations. Common additional HTTP requests include PUT and
DELETE, but related technologies like WebDAV offers PROPFIND, COPY, MOVE and
more.
Normally you don't 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 will not suffice. You need to use the \fI-I, --head\fP
option.

(FTP)
Specifies a custom FTP command to use instead of LIST when doing file lists
Daniel Stenberg's avatar
Daniel Stenberg committed
If this option is used several times, the last one will be used.
Michal Marek's avatar
Michal Marek committed

.IP "--xattr"
When saving output to a file, this option tells curl to store certain file
metadata in extened file attributes. Currently, the URL is stored in the
xdg.origin.url attribute and, for HTTP, the content type is stored in
the mime_type attribute. If the file system does not support extended
attributes, a warning is issued.

.IP "-y, --speed-time <time>"
If a download is slower than speed-limit bytes per second during a speed-time
period, the download gets aborted. If speed-time is used, the default
Ant Bryan's avatar
Ant Bryan committed
speed-limit will be 1 unless set with \fI-Y\fP.
This option controls transfers and thus will not affect slow connects etc. If
this is a concern for you, try the \fI--connect-timeout\fP option.

Daniel Stenberg's avatar
Daniel Stenberg committed
If this option is used several times, the last one will be used.
.IP "-Y, --speed-limit <speed>"
If a download is slower than this given speed (in bytes per second) for
speed-time seconds it gets aborted. speed-time is set with \fI-y\fP and is 30
if not set.
Daniel Stenberg's avatar
Daniel Stenberg committed
If this option is used several times, the last one will be used.
.IP "-z/--time-cond <date expression>|<file>"
(HTTP/FTP) Request a file that has been modified later than the given time and
date, or one that has been modified before that time. The <date expression>
can be all sorts of date strings or if it doesn't match any internal ones, it
is taken as a filename and tries to get the modification date (mtime) from
<file> instead. See the \fIcurl_getdate(3)\fP man pages for date expression
details.

Start the date expression with a dash (-) to make it request for a document
that is older than the given date/time, default is a document that is newer
than the specified date/time.
If this option is used several times, the last one will be used.
.IP "-h, --help"
Usage help.
.IP "-M, --manual"
Manual. Display the huge help text.
.IP "-V, --version"
Displays information about curl and the libcurl version it uses.
The first line includes the full version of curl, libcurl and other 3rd party
libraries linked with the executable.

The second line (starts with "Protocols:") shows all protocols that libcurl
reports to support.

The third line (starts with "Features:") shows specific features libcurl
reports to offer. Available features include:
.RS
.IP "IPv6"
You can use IPv6 with this.
.IP "krb4"
Krb4 for FTP is supported.
.IP "SSL"
HTTPS and FTPS are supported.
.IP "libz"
Automatic decompression of compressed files over HTTP is supported.
.IP "NTLM"
NTLM authentication is supported.
.IP "GSS-Negotiate"
Negotiate authentication and krb5 for FTP is supported.
.IP "Debug"
This curl uses a libcurl built with Debug. This enables more error-tracking
and memory debugging etc. For curl-developers only!
.IP "AsynchDNS"
This curl uses asynchronous name resolves.
.IP "SPNEGO"
SPNEGO Negotiate authentication is supported.
.IP "Largefile"
This curl supports transfers of large files, files larger than 2GB.
.IP "IDN"
This curl supports IDN - international domain names.
.IP "SSPI"
SSPI is supported. If you use NTLM and set a blank user name, curl will
authenticate with your current user and password.
.IP "TLS-SRP"
SRP (Secure Remote Password) authentication is supported for TLS.
This curl supports Metalink (both version 3 and 4 (RFC 5854)), which
describes mirrors and hashes.  curl will use mirrors for failover if
there are errors (such as the file or server not being available).
.SH FILES
.I ~/.curlrc
.RS
Default config file, see \fI-K, --config\fP for details.
.SH ENVIRONMENT
The environment variables can be specified in lower case or upper case. The
lower case version has precedence. http_proxy is an exception as it is only
available in lower case.

Using an environment variable to set the proxy has the same effect as using
the \fI--proxy\fP option.

.IP "http_proxy [protocol://]<host>[:port]"
Sets the proxy server to use for HTTP.
.IP "HTTPS_PROXY [protocol://]<host>[:port]"
Sets the proxy server to use for HTTPS.
.IP "[url-protocol]_PROXY [protocol://]<host>[:port]"
Sets the proxy server to use for [url-protocol], where the protocol is a
protocol that curl supports and as specified in a URL. FTP, FTPS, POP3, IMAP,
SMTP, LDAP etc.
.IP "ALL_PROXY [protocol://]<host>[:port]"
Sets the proxy server to use if no protocol-specific proxy is set.
.IP "NO_PROXY <comma-separated list of hosts>"
list of host names that shouldn't go through any proxy. If set to a asterisk
\&'*' only, it matches all hosts.
.SH "PROXY PROTOCOL PREFIXES"
Since curl version 7.21.7, the proxy string may be specified with a
protocol:// prefix to specify alternative proxy protocols.

If no protocol is specified in the proxy string or if the string doesn't match
Ant Bryan's avatar
Ant Bryan committed
a supported one, the proxy will be treated as an HTTP proxy.

The supported proxy protocol prefixes are as follows:
.IP "socks4://"
Makes it the equivalent of \fI--socks4\fP
.IP "socks4a://"
Makes it the equivalent of \fI--socks4a\fP
.IP "socks5://"
Makes it the equivalent of \fI--socks5\fP
.IP "socks5h://"
Makes it the equivalent of \fI--socks5-hostname\fP
.SH EXIT CODES
There are a bunch of different error codes and their corresponding error
messages that may appear during bad conditions. At the time of this writing,
the exit codes are:
.IP 1
Unsupported protocol. This build of curl has no support for this protocol.
.IP 2
Failed to initialize.
.IP 3
URL malformed. The syntax was not correct.
.IP 4
A feature or option that was needed to perform the desired request was not
enabled or was explicitly disabled at build-time. To make curl able to do
this, you probably need another build of libcurl!
.IP 5
Couldn't resolve proxy. The given proxy host could not be resolved.
.IP 6
Couldn't resolve host. The given remote host was not resolved.
.IP 7
Failed to connect to host.
.IP 8
FTP weird server reply. The server sent data curl couldn't parse.
.IP 9
FTP access denied. The server denied login or denied access to the particular
resource or directory you wanted to reach. Most often you tried to change to a
directory that doesn't exist on the server.
.IP 11
FTP weird PASS reply. Curl couldn't parse the reply sent to the PASS request.
.IP 13
FTP weird PASV reply, Curl couldn't parse the reply sent to the PASV request.
.IP 14
Daniel Stenberg's avatar
Daniel Stenberg committed
FTP weird 227 format. Curl couldn't parse the 227-line the server sent.
.IP 15
FTP can't get host. Couldn't resolve the host IP we got in the 227-line.
.IP 17
FTP couldn't set binary. Couldn't change transfer method to binary.
.IP 18
Partial file. Only a part of the file was transferred.
Daniel Stenberg's avatar
Daniel Stenberg committed
FTP couldn't download/access the given file, the RETR (or similar) command
failed.
.IP 21
FTP quote error. A quote command returned error from the server.
.IP 22
HTTP page not retrieved. The requested url was not found or returned another
error with the HTTP error code being 400 or above. This return code only
appears if \fI-f, --fail\fP is used.
.IP 23
Write error. Curl couldn't write data to a local filesystem or similar.
.IP 25
FTP couldn't STOR file. The server denied the STOR operation, used for FTP
uploading.
.IP 26
Read error. Various reading problems.
.IP 27
Out of memory. A memory allocation request failed.
.IP 28
Operation timeout. The specified time-out period was reached according to the
conditions.
.IP 30
FTP PORT failed. The PORT command failed. Not all FTP servers support the PORT
command, try doing a transfer using PASV instead!
FTP couldn't use REST. The REST command failed. This command is used for
resumed FTP transfers.
.IP 33
HTTP range error. The range "command" didn't work.
.IP 34
HTTP post error. Internal post-request generation error.
.IP 35
SSL connect error. The SSL handshaking failed.
.IP 36
FTP bad download resume. Couldn't continue an earlier aborted download.
.IP 37
FILE couldn't read file. Failed to open the file. Permissions?
.IP 38
LDAP cannot bind. LDAP bind operation failed.
.IP 39
LDAP search failed.
.IP 41
Function not found. A required LDAP function was not found.
Daniel Stenberg's avatar
Daniel Stenberg committed
.IP 42
Aborted by callback. An application told curl to abort the operation.
.IP 43
Internal error. A function was called with a bad parameter.
.IP 45
Interface error. A specified outgoing interface could not be used.
.IP 47
Too many redirects. When following redirects, curl hit the maximum amount.
Daniel Stenberg's avatar
Daniel Stenberg committed
.IP 48
Unknown option specified to libcurl. This indicates that you passed a weird
option to curl that was passed on to libcurl and rejected. Read up in the
manual!
Daniel Stenberg's avatar
Daniel Stenberg committed
.IP 49
Malformed telnet option.
Daniel Stenberg's avatar
Daniel Stenberg committed
The peer's SSL certificate or SSH MD5 fingerprint was not OK.
.IP 52
The server didn't reply anything, which here is considered an error.
Cannot set SSL crypto engine as default.
Peer certificate cannot be authenticated with known CA certificates.
Sending the data requires a rewind that failed.
The user name, password, or similar was not accepted and curl failed to log in.
Character conversion functions required.
Problem with reading the SSL CA cert (path? access rights?).
The resource referenced in the URL does not exist.
An unspecified error occurred during the SSH session.
Failed to shut down the SSL connection.
Could not load CRL file, missing or wrong format (added in 7.19.0).
Issuer check failed (added in 7.19.0).
.IP 84
The FTP PRET command failed
.IP 85
RTSP: mismatch of CSeq numbers
.IP 86
RTSP: mismatch of Session Identifiers
.IP 87
unable to parse FTP file list
.IP 88
FTP chunk callback reported error
More error codes will appear here in future releases. The existing ones
are meant to never change.
.SH AUTHORS / CONTRIBUTORS
Daniel Stenberg is the main author, but the whole list of contributors is
found in the separate THANKS file.
Daniel Stenberg's avatar
Daniel Stenberg committed
http://curl.haxx.se
.SH FTP
ftp://ftp.sunet.se/pub/www/utilities/curl/
.SH "SEE ALSO"
.BR ftp (1),
Dan Fandrich's avatar
Dan Fandrich committed
.BR wget (1)