1curl(1) Curl Manual curl(1)
2
3
4
6 curl - transfer a URL
7
9 curl [options / URLs]
10
12 curl is a tool to transfer data from or to a server, using one of the
13 supported protocols (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP,
14 IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS,
15 SMTP, SMTPS, TELNET and TFTP). The command is designed to work without
16 user interaction.
17
18 curl offers a busload of useful tricks like proxy support, user authen‐
19 tication, FTP upload, HTTP post, SSL connections, cookies, file trans‐
20 fer resume, Metalink, and more. As you will see below, the number of
21 features will make your head spin!
22
23 curl is powered by libcurl for all transfer-related features. See
24 libcurl(3) for details.
25
27 The URL syntax is protocol-dependent. You'll find a detailed descrip‐
28 tion in RFC 3986.
29
30 You can specify multiple URLs or parts of URLs by writing part sets
31 within braces as in:
32
33 http://site.{one,two,three}.com
34
35 or you can get sequences of alphanumeric series by using [] as in:
36
37 ftp://ftp.example.com/file[1-100].txt
38
39 ftp://ftp.example.com/file[001-100].txt (with leading zeros)
40
41 ftp://ftp.example.com/file[a-z].txt
42
43 Nested sequences are not supported, but you can use several ones next
44 to each other:
45
46 http://example.com/archive[1996-1999]/vol[1-4]/part{a,b,c}.html
47
48 You can specify any amount of URLs on the command line. They will be
49 fetched in a sequential manner in the specified order. You can specify
50 command line options and URLs mixed and in any order on the command
51 line.
52
53 You can specify a step counter for the ranges to get every Nth number
54 or letter:
55
56 http://example.com/file[1-100:10].txt
57
58 http://example.com/file[a-z:2].txt
59
60 When using [] or {} sequences when invoked from a command line prompt,
61 you probably have to put the full URL within double quotes to avoid the
62 shell from interfering with it. This also goes for other characters
63 treated special, like for example '&', '?' and '*'.
64
65 Provide the IPv6 zone index in the URL with an escaped percentage sign
66 and the interface name. Like in
67
68 http://[fe80::3%25eth0]/
69
70 If you specify URL without protocol:// prefix, curl will attempt to
71 guess what protocol you might want. It will then default to HTTP but
72 try other protocols based on often-used host name prefixes. For exam‐
73 ple, for host names starting with "ftp." curl will assume you want to
74 speak FTP.
75
76 curl will do its best to use what you pass to it as a URL. It is not
77 trying to validate it as a syntactically correct URL by any means but
78 is instead very liberal with what it accepts.
79
80 curl will attempt to re-use connections for multiple file transfers, so
81 that getting many files from the same server will not do multiple con‐
82 nects / handshakes. This improves speed. Of course this is only done on
83 files specified on a single command line and cannot be used between
84 separate curl invokes.
85
87 curl normally displays a progress meter during operations, indicating
88 the amount of transferred data, transfer speeds and estimated time
89 left, etc. The progress meter displays number of bytes and the speeds
90 are in bytes per second. The suffixes (k, M, G, T, P) are 1024 based.
91 For example 1k is 1024 bytes. 1M is 1048576 bytes.
92
93 curl displays this data to the terminal by default, so if you invoke
94 curl to do an operation and it is about to write data to the terminal,
95 it disables the progress meter as otherwise it would mess up the output
96 mixing progress meter and response data.
97
98 If you want a progress meter for HTTP POST or PUT requests, you need to
99 redirect the response output to a file, using shell redirect (>), -o,
100 --output or similar.
101
102 It is not the same case for FTP upload as that operation does not spit
103 out any response data to the terminal.
104
105 If you prefer a progress "bar" instead of the regular meter, -#,
106 --progress-bar is your friend. You can also disable the progress meter
107 completely with the -s, --silent option.
108
110 Options start with one or two dashes. Many of the options require an
111 additional value next to them.
112
113 The short "single-dash" form of the options, -d for example, may be
114 used with or without a space between it and its value, although a space
115 is a recommended separator. The long "double-dash" form, -d, --data for
116 example, requires a space between it and its value.
117
118 Short version options that don't need any additional values can be used
119 immediately next to each other, like for example you can specify all
120 the options -O, -L and -v at once as -OLv.
121
122 In general, all boolean options are enabled with --option and yet again
123 disabled with --no-option. That is, you use the exact same option name
124 but prefix it with "no-". However, in this list we mostly only list and
125 show the --option version of them. (This concept with --no options was
126 added in 7.19.0. Previously most options were toggled on/off on
127 repeated use of the same command line option.)
128
129 --abstract-unix-socket <path>
130 (HTTP) Connect through an abstract Unix domain socket, instead
131 of using the network. Note: netstat shows the path of an
132 abstract socket prefixed with '@', however the <path> argument
133 should not have this leading character.
134
135 Added in 7.53.0.
136
137 --anyauth
138 (HTTP) Tells curl to figure out authentication method by itself,
139 and use the most secure one the remote site claims to support.
140 This is done by first doing a request and checking the response-
141 headers, thus possibly inducing an extra network round-trip.
142 This is used instead of setting a specific authentication
143 method, which you can do with --basic, --digest, --ntlm, and
144 --negotiate.
145
146 Using --anyauth is not recommended if you do uploads from stdin,
147 since it may require data to be sent twice and then the client
148 must be able to rewind. If the need should arise when uploading
149 from stdin, the upload operation will fail.
150
151 Used together with -u, --user.
152
153 See also --proxy-anyauth and --basic and --digest.
154
155 -a, --append
156 (FTP SFTP) When used in an upload, this makes curl append to the
157 target file instead of overwriting it. If the remote file
158 doesn't exist, it will be created. Note that this flag is
159 ignored by some SFTP servers (including OpenSSH).
160
161 --basic
162 (HTTP) Tells curl to use HTTP Basic authentication with the
163 remote host. This is the default and this option is usually
164 pointless, unless you use it to override a previously set option
165 that sets a different authentication method (such as --ntlm,
166 --digest, or --negotiate).
167
168 Used together with -u, --user.
169
170 See also --proxy-basic.
171
172 --cacert <file>
173 (TLS) Tells curl to use the specified certificate file to verify
174 the peer. The file may contain multiple CA certificates. The
175 certificate(s) must be in PEM format. Normally curl is built to
176 use a default file for this, so this option is typically used to
177 alter that default file.
178
179 curl recognizes the environment variable named 'CURL_CA_BUNDLE'
180 if it is set, and uses the given path as a path to a CA cert
181 bundle. This option overrides that variable.
182
183 The windows version of curl will automatically look for a CA
184 certs file named ´curl-ca-bundle.crt´, either in the same direc‐
185 tory as curl.exe, or in the Current Working Directory, or in any
186 folder along your PATH.
187
188 If curl is built against the NSS SSL library, the NSS PEM
189 PKCS#11 module (libnsspem.so) needs to be available for this
190 option to work properly.
191
192 (iOS and macOS only) If curl is built against Secure Transport,
193 then this option is supported for backward compatibility with
194 other SSL engines, but it should not be set. If the option is
195 not set, then curl will use the certificates in the system and
196 user Keychain to verify the peer, which is the preferred method
197 of verifying the peer's certificate chain.
198
199 (Schannel only) This option is supported for Schannel in Windows
200 7 or later with libcurl 7.60 or later. This option is supported
201 for backward compatibility with other SSL engines; instead it is
202 recommended to use Windows' store of root certificates (the
203 default for Schannel).
204
205 If this option is used several times, the last one will be used.
206
207 --capath <dir>
208 (TLS) Tells curl to use the specified certificate directory to
209 verify the peer. Multiple paths can be provided by separating
210 them with ":" (e.g. "path1:path2:path3"). The certificates must
211 be in PEM format, and if curl is built against OpenSSL, the
212 directory must have been processed using the c_rehash utility
213 supplied with OpenSSL. Using --capath can allow OpenSSL-powered
214 curl to make SSL-connections much more efficiently than using
215 --cacert if the --cacert file contains many CA certificates.
216
217 If this option is set, the default capath value will be ignored,
218 and if it is used several times, the last one will be used.
219
220 --cert-status
221 (TLS) Tells curl to verify the status of the server certificate
222 by using the Certificate Status Request (aka. OCSP stapling) TLS
223 extension.
224
225 If this option is enabled and the server sends an invalid (e.g.
226 expired) response, if the response suggests that the server cer‐
227 tificate has been revoked, or no response at all is received,
228 the verification fails.
229
230 This is currently only implemented in the OpenSSL, GnuTLS and
231 NSS backends.
232
233 Added in 7.41.0.
234
235 --cert-type <type>
236 (TLS) Tells curl what type the provided client certificate is
237 using. PEM, DER, ENG and P12 are recognized types. If not spec‐
238 ified, PEM is assumed.
239
240 If this option is used several times, the last one will be used.
241
242 See also -E, --cert and --key and --key-type.
243
244 -E, --cert <certificate[:password]>
245 (TLS) Tells curl to use the specified client certificate file
246 when getting a file with HTTPS, FTPS or another SSL-based proto‐
247 col. The certificate must be in PKCS#12 format if using Secure
248 Transport, or PEM format if using any other engine. If the
249 optional password isn't specified, it will be queried for on the
250 terminal. Note that this option assumes a "certificate" file
251 that is the private key and the client certificate concatenated!
252 See -E, --cert and --key to specify them independently.
253
254 If curl is built against the NSS SSL library then this option
255 can tell curl the nickname of the certificate to use within the
256 NSS database defined by the environment variable SSL_DIR (or by
257 default /etc/pki/nssdb). If the NSS PEM PKCS#11 module (lib‐
258 nsspem.so) is available then PEM files may be loaded. If you
259 want to use a file from the current directory, please precede it
260 with "./" prefix, in order to avoid confusion with a nickname.
261 If the nickname contains ":", it needs to be preceded by "\" so
262 that it is not recognized as password delimiter. If the nick‐
263 name contains "\", it needs to be escaped as "\\" so that it is
264 not recognized as an escape character.
265
266 If curl is built against OpenSSL library, and the engine pkcs11
267 is available, then a PKCS#11 URI (RFC 7512) can be used to spec‐
268 ify a certificate located in a PKCS#11 device. A string begin‐
269 ning with "pkcs11:" will be interpreted as a PKCS#11 URI. If a
270 PKCS#11 URI is provided, then the --engine option will be set as
271 "pkcs11" if none was provided and the --cert-type option will be
272 set as "ENG" if none was provided.
273
274 (iOS and macOS only) If curl is built against Secure Transport,
275 then the certificate string can either be the name of a certifi‐
276 cate/private key in the system or user keychain, or the path to
277 a PKCS#12-encoded certificate and private key. If you want to
278 use a file from the current directory, please precede it with
279 "./" prefix, in order to avoid confusion with a nickname.
280
281 (Schannel only) Client certificates must be specified by a path
282 expression to a certificate store. (Loading PFX is not sup‐
283 ported; you can import it to a store first). You can use "<store
284 location>\<store name>\<thumbprint>" to refer to a certificate
285 in the system certificates store, for example, "Curren‐
286 tUser\MY\934a7ac6f8a5d579285a74fa61e19f23ddfe8d7a". Thumbprint
287 is usually a SHA-1 hex string which you can see in certificate
288 details. Following store locations are supported: CurrentUser,
289 LocalMachine, CurrentService, Services, CurrentUserGroupPolicy,
290 LocalMachineGroupPolicy, LocalMachineEnterprise.
291
292 If this option is used several times, the last one will be used.
293
294 See also --cert-type and --key and --key-type.
295
296 --ciphers <list of ciphers>
297 (TLS) Specifies which ciphers to use in the connection. The list
298 of ciphers must specify valid ciphers. Read up on SSL cipher
299 list details on this URL:
300
301 https://curl.haxx.se/docs/ssl-ciphers.html
302
303 If this option is used several times, the last one will be used.
304
305 --compressed-ssh
306 (SCP SFTP) Enables built-in SSH compression. This is a request,
307 not an order; the server may or may not do it.
308
309 Added in 7.56.0.
310
311 --compressed
312 (HTTP) Request a compressed response using one of the algorithms
313 curl supports, and save the uncompressed document. If this
314 option is used and the server sends an unsupported encoding,
315 curl will report an error.
316
317 -K, --config <file>
318
319 Specify a text file to read curl arguments from. The command
320 line arguments found in the text file will be used as if they
321 were provided on the command line.
322
323 Options and their parameters must be specified on the same line
324 in the file, separated by whitespace, colon, or the equals sign.
325 Long option names can optionally be given in the config file
326 without the initial double dashes and if so, the colon or equals
327 characters can be used as separators. If the option is specified
328 with one or two dashes, there can be no colon or equals charac‐
329 ter between the option and its parameter.
330
331 If the parameter is to contain whitespace, the parameter must be
332 enclosed within quotes. Within double quotes, the following
333 escape sequences are available: \\, \", \t, \n, \r and \v. A
334 backslash preceding any other letter is ignored. If the first
335 column of a config line is a '#' character, the rest of the line
336 will be treated as a comment. Only write one option per physical
337 line in the config file.
338
339 Specify the filename to -K, --config as '-' to make curl read
340 the file from stdin.
341
342 Note that to be able to specify a URL in the config file, you
343 need to specify it using the --url option, and not by simply
344 writing the URL on its own line. So, it could look similar to
345 this:
346
347 url = "https://curl.haxx.se/docs/"
348
349 When curl is invoked, it (unless -q, --disable is used) checks
350 for a default config file and uses it if found. The default con‐
351 fig file is checked for in the following places in this order:
352
353 1) curl tries to find the "home dir": It first checks for the
354 CURL_HOME and then the HOME environment variables. Failing that,
355 it uses getpwuid() on Unix-like systems (which returns the home
356 dir given the current user in your system). On Windows, it then
357 checks for the APPDATA variable, or as a last resort the '%USER‐
358 PROFILE%\Application Data'.
359
360 2) On windows, if there is no _curlrc file in the home dir, it
361 checks for one in the same dir the curl executable is placed. On
362 Unix-like systems, it will simply try to load .curlrc from the
363 determined home dir.
364
365 # --- Example file ---
366 # this is a comment
367 url = "example.com"
368 output = "curlhere.html"
369 user-agent = "superagent/1.0"
370
371 # and fetch another URL too
372 url = "example.com/docs/manpage.html"
373 -O
374 referer = "http://nowhereatall.example.com/"
375 # --- End of example file ---
376
377 This option can be used multiple times to load multiple config
378 files.
379
380 --connect-timeout <seconds>
381 Maximum time in seconds that you allow curl's connection to
382 take. This only limits the connection phase, so if curl con‐
383 nects within the given period it will continue - if not it will
384 exit. Since version 7.32.0, this option accepts decimal values.
385
386 If this option is used several times, the last one will be used.
387
388 See also -m, --max-time.
389
390 --connect-to <HOST1:PORT1:HOST2:PORT2>
391
392 For a request to the given HOST1:PORT1 pair, connect to
393 HOST2:PORT2 instead. This option is suitable to direct requests
394 at a specific server, e.g. at a specific cluster node in a clus‐
395 ter of servers. This option is only used to establish the net‐
396 work connection. It does NOT affect the hostname/port that is
397 used for TLS/SSL (e.g. SNI, certificate verification) or for the
398 application protocols. "HOST1" and "PORT1" may be the empty
399 string, meaning "any host/port". "HOST2" and "PORT2" may also be
400 the empty string, meaning "use the request's original
401 host/port".
402
403 A "host" specified to this option is compared as a string, so it
404 needs to match the name used in request URL. It can be either
405 numerical such as "127.0.0.1" or the full host name such as
406 "example.org".
407
408 This option can be used many times to add many connect rules.
409
410 See also --resolve and -H, --header. Added in 7.49.0.
411
412 -C, --continue-at <offset>
413 Continue/Resume a previous file transfer at the given offset.
414 The given offset is the exact number of bytes that will be
415 skipped, counting from the beginning of the source file before
416 it is transferred to the destination. If used with uploads, the
417 FTP server command SIZE will not be used by curl.
418
419 Use "-C -" to tell curl to automatically find out where/how to
420 resume the transfer. It then uses the given output/input files
421 to figure that out.
422
423 If this option is used several times, the last one will be used.
424
425 See also -r, --range.
426
427 -c, --cookie-jar <filename>
428 (HTTP) Specify to which file you want curl to write all cookies
429 after a completed operation. Curl writes all cookies from its
430 in-memory cookie storage to the given file at the end of opera‐
431 tions. If no cookies are known, no data will be written. The
432 file will be written using the Netscape cookie file format. If
433 you set the file name to a single dash, "-", the cookies will be
434 written to stdout.
435
436 This command line option will activate the cookie engine that
437 makes curl record and use cookies. Another way to activate it is
438 to use the -b, --cookie option.
439
440 If the cookie jar can't be created or written to, the whole curl
441 operation won't fail or even report an error clearly. Using -v,
442 --verbose will get a warning displayed, but that is the only
443 visible feedback you get about this possibly lethal situation.
444
445 If this option is used several times, the last specified file
446 name will be used.
447
448 -b, --cookie <data>
449 (HTTP) Pass the data to the HTTP server in the Cookie header. It
450 is supposedly the data previously received from the server in a
451 "Set-Cookie:" line. The data should be in the format
452 "NAME1=VALUE1; NAME2=VALUE2".
453
454 If no '=' symbol is used in the argument, it is instead treated
455 as a filename to read previously stored cookie from. This option
456 also activates the cookie engine which will make curl record
457 incoming cookies, which may be handy if you're using this in
458 combination with the -L, --location option or do multiple URL
459 transfers on the same invoke. If the file name is exactly a
460 minus ("-"), curl will instead the contents from stdin.
461
462 The file format of the file to read cookies from should be plain
463 HTTP headers (Set-Cookie style) or the Netscape/Mozilla cookie
464 file format.
465
466 The file specified with -b, --cookie is only used as input. No
467 cookies will be written to the file. To store cookies, use the
468 -c, --cookie-jar option.
469
470 Exercise caution if you are using this option and multiple
471 transfers may occur. If you use the NAME1=VALUE1; format, or in
472 a file use the Set-Cookie format and don't specify a domain,
473 then the cookie is sent for any domain (even after redirects are
474 followed) and cannot be modified by a server-set cookie. If the
475 cookie engine is enabled and a server sets a cookie of the same
476 name then both will be sent on a future transfer to that server,
477 likely not what you intended. To address these issues set a
478 domain in Set-Cookie (doing that will include sub domains) or
479 use the Netscape format.
480
481 If this option is used several times, the last one will be used.
482
483 Users very often want to both read cookies from a file and write
484 updated cookies back to a file, so using both -b, --cookie and
485 -c, --cookie-jar in the same command line is common.
486
487 --create-dirs
488 When used in conjunction with the -o, --output option, curl will
489 create the necessary local directory hierarchy as needed. This
490 option creates the dirs mentioned with the -o, --output option,
491 nothing else. If the --output file name uses no dir or if the
492 dirs it mentions already exist, no dir will be created.
493
494 To create remote directories when using FTP or SFTP, try --ftp-
495 create-dirs.
496
497 --crlf (FTP SMTP) Convert LF to CRLF in upload. Useful for MVS
498 (OS/390).
499
500 (SMTP added in 7.40.0)
501
502 --crlfile <file>
503 (TLS) Provide a file using PEM format with a Certificate Revoca‐
504 tion List that may specify peer certificates that are to be con‐
505 sidered revoked.
506
507 If this option is used several times, the last one will be used.
508
509 Added in 7.19.7.
510
511 --data-ascii <data>
512 (HTTP) This is just an alias for -d, --data.
513
514 --data-binary <data>
515 (HTTP) This posts data exactly as specified with no extra pro‐
516 cessing whatsoever.
517
518 If you start the data with the letter @, the rest should be a
519 filename. Data is posted in a similar manner as -d, --data
520 does, except that newlines and carriage returns are preserved
521 and conversions are never done.
522
523 Like -d, --data the default content-type sent to the server is
524 application/x-www-form-urlencoded. If you want the data to be
525 treated as arbitrary binary data by the server then set the con‐
526 tent-type to octet-stream: -H "Content-Type: application/octet-
527 stream".
528
529 If this option is used several times, the ones following the
530 first will append data as described in -d, --data.
531
532 --data-raw <data>
533 (HTTP) This posts data similarly to -d, --data but without the
534 special interpretation of the @ character.
535
536 See also -d, --data. Added in 7.43.0.
537
538 --data-urlencode <data>
539 (HTTP) This posts data, similar to the other -d, --data options
540 with the exception that this performs URL-encoding.
541
542 To be CGI-compliant, the <data> part should begin with a name
543 followed by a separator and a content specification. The <data>
544 part can be passed to curl using one of the following syntaxes:
545
546 content
547 This will make curl URL-encode the content and pass that
548 on. Just be careful so that the content doesn't contain
549 any = or @ symbols, as that will then make the syntax
550 match one of the other cases below!
551
552 =content
553 This will make curl URL-encode the content and pass that
554 on. The preceding = symbol is not included in the data.
555
556 name=content
557 This will make curl URL-encode the content part and pass
558 that on. Note that the name part is expected to be URL-
559 encoded already.
560
561 @filename
562 This will make curl load data from the given file
563 (including any newlines), URL-encode that data and pass
564 it on in the POST.
565
566 name@filename
567 This will make curl load data from the given file
568 (including any newlines), URL-encode that data and pass
569 it on in the POST. The name part gets an equal sign
570 appended, resulting in name=urlencoded-file-content. Note
571 that the name is expected to be URL-encoded already.
572
573 See also -d, --data and --data-raw. Added in 7.18.0.
574
575 -d, --data <data>
576 (HTTP) Sends the specified data in a POST request to the HTTP
577 server, in the same way that a browser does when a user has
578 filled in an HTML form and presses the submit button. This will
579 cause curl to pass the data to the server using the content-type
580 application/x-www-form-urlencoded. Compare to -F, --form.
581
582 --data-raw is almost the same but does not have a special inter‐
583 pretation of the @ character. To post data purely binary, you
584 should instead use the --data-binary option. To URL-encode the
585 value of a form field you may use --data-urlencode.
586
587 If any of these options is used more than once on the same com‐
588 mand line, the data pieces specified will be merged together
589 with a separating &-symbol. Thus, using '-d name=daniel -d
590 skill=lousy' would generate a post chunk that looks like
591 'name=daniel&skill=lousy'.
592
593 If you start the data with the letter @, the rest should be a
594 file name to read the data from, or - if you want curl to read
595 the data from stdin. Multiple files can also be specified. Post‐
596 ing data from a file named from a file like that, carriage
597 returns and newlines will be stripped out. If you don't want the
598 @ character to have a special interpretation use --data-raw
599 instead.
600
601 See also --data-binary and --data-urlencode and --data-raw. This
602 option overrides -F, --form and -I, --head and -T, --upload-
603 file.
604
605 --delegation <LEVEL>
606 (GSS/kerberos) Set LEVEL to tell the server what it is allowed
607 to delegate when it comes to user credentials.
608
609 none Don't allow any delegation.
610
611 policy Delegates if and only if the OK-AS-DELEGATE flag is set
612 in the Kerberos service ticket, which is a matter of
613 realm policy.
614
615 always Unconditionally allow the server to delegate.
616
617 --digest
618 (HTTP) Enables HTTP Digest authentication. This is an authenti‐
619 cation scheme that prevents the password from being sent over
620 the wire in clear text. Use this in combination with the normal
621 -u, --user option to set user name and password.
622
623 If this option is used several times, only the first one is
624 used.
625
626 See also -u, --user and --proxy-digest and --anyauth. This
627 option overrides --basic and --ntlm and --negotiate.
628
629 --disable-eprt
630 (FTP) Tell curl to disable the use of the EPRT and LPRT commands
631 when doing active FTP transfers. Curl will normally always first
632 attempt to use EPRT, then LPRT before using PORT, but with this
633 option, it will use PORT right away. EPRT and LPRT are exten‐
634 sions to the original FTP protocol, and may not work on all
635 servers, but they enable more functionality in a better way than
636 the traditional PORT command.
637
638 --eprt can be used to explicitly enable EPRT again and --no-eprt
639 is an alias for --disable-eprt.
640
641 If the server is accessed using IPv6, this option will have no
642 effect as EPRT is necessary then.
643
644 Disabling EPRT only changes the active behavior. If you want to
645 switch to passive mode you need to not use -P, --ftp-port or
646 force it with --ftp-pasv.
647
648 --disable-epsv
649 (FTP) (FTP) Tell curl to disable the use of the EPSV command
650 when doing passive FTP transfers. Curl will normally always
651 first attempt to use EPSV before PASV, but with this option, it
652 will not try using EPSV.
653
654 --epsv can be used to explicitly enable EPSV again and --no-epsv
655 is an alias for --disable-epsv.
656
657 If the server is an IPv6 host, this option will have no effect
658 as EPSV is necessary then.
659
660 Disabling EPSV only changes the passive behavior. If you want to
661 switch to active mode you need to use -P, --ftp-port.
662
663 -q, --disable
664 If used as the first parameter on the command line, the curlrc
665 config file will not be read and used. See the -K, --config for
666 details on the default config file search path.
667
668 --disallow-username-in-url
669 (HTTP) This tells curl to exit if passed a url containing a
670 username.
671
672 See also --proto. Added in 7.61.0.
673
674 --dns-interface <interface>
675 (DNS) Tell curl to send outgoing DNS requests through <inter‐
676 face>. This option is a counterpart to --interface (which does
677 not affect DNS). The supplied string must be an interface name
678 (not an address).
679
680 See also --dns-ipv4-addr and --dns-ipv6-addr. --dns-interface
681 requires that the underlying libcurl was built to support c-
682 ares. Added in 7.33.0.
683
684 --dns-ipv4-addr <address>
685 (DNS) Tell curl to bind to <ip-address> when making IPv4 DNS
686 requests, so that the DNS requests originate from this address.
687 The argument should be a single IPv4 address.
688
689 See also --dns-interface and --dns-ipv6-addr. --dns-ipv4-addr
690 requires that the underlying libcurl was built to support c-
691 ares. Added in 7.33.0.
692
693 --dns-ipv6-addr <address>
694 (DNS) Tell curl to bind to <ip-address> when making IPv6 DNS
695 requests, so that the DNS requests originate from this address.
696 The argument should be a single IPv6 address.
697
698 See also --dns-interface and --dns-ipv4-addr. --dns-ipv6-addr
699 requires that the underlying libcurl was built to support c-
700 ares. Added in 7.33.0.
701
702 --dns-servers <addresses>
703 Set the list of DNS servers to be used instead of the system
704 default. The list of IP addresses should be separated with com‐
705 mas. Port numbers may also optionally be given as :<port-number>
706 after each IP address.
707
708 --dns-servers requires that the underlying libcurl was built to
709 support c-ares. Added in 7.33.0.
710
711 --doh-url <URL>
712 (all) Specifies which DNS-over-HTTPS (DOH) server to use to
713 resolve hostnames, instead of using the default name resolver
714 mechanism. The URL must be HTTPS.
715
716 If this option is used several times, the last one will be used.
717
718 -D, --dump-header <filename>
719 (HTTP FTP) Write the received protocol headers to the specified
720 file.
721
722 This option is handy to use when you want to store the headers
723 that an HTTP site sends to you. Cookies from the headers could
724 then be read in a second curl invocation by using the -b,
725 --cookie option! The -c, --cookie-jar option is a better way to
726 store cookies.
727
728 When used in FTP, the FTP server response lines are considered
729 being "headers" and thus are saved there.
730
731 If this option is used several times, the last one will be used.
732
733 See also -o, --output.
734
735 --egd-file <file>
736 (TLS) Specify the path name to the Entropy Gathering Daemon
737 socket. The socket is used to seed the random engine for SSL
738 connections.
739
740 See also --random-file.
741
742 --engine <name>
743 (TLS) Select the OpenSSL crypto engine to use for cipher opera‐
744 tions. Use --engine list to print a list of build-time supported
745 engines. Note that not all (or none) of the engines may be
746 available at run-time.
747
748 --expect100-timeout <seconds>
749 (HTTP) Maximum time in seconds that you allow curl to wait for a
750 100-continue response when curl emits an Expects: 100-continue
751 header in its request. By default curl will wait one second.
752 This option accepts decimal values! When curl stops waiting, it
753 will continue as if the response has been received.
754
755 See also --connect-timeout. Added in 7.47.0.
756
757 --fail-early
758 Fail and exit on the first detected transfer error.
759
760 When curl is used to do multiple transfers on the command line,
761 it will attempt to operate on each given URL, one by one. By
762 default, it will ignore errors if there are more URLs given and
763 the last URL's success will determine the error code curl
764 returns. So early failures will be "hidden" by subsequent suc‐
765 cessful transfers.
766
767 Using this option, curl will instead return an error on the
768 first transfer that fails, independent of the amount of URLs
769 that are given on the command line. This way, no transfer fail‐
770 ures go undetected by scripts and similar.
771
772 This option is global and does not need to be specified for each
773 use of -:, --next.
774
775 This option does not imply -f, --fail, which causes transfers to
776 fail due to the server's HTTP status code. You can combine the
777 two options, however note -f, --fail is not global and is there‐
778 fore contained by -:, --next.
779
780 Added in 7.52.0.
781
782 -f, --fail
783 (HTTP) Fail silently (no output at all) on server errors. This
784 is mostly done to better enable scripts etc to better deal with
785 failed attempts. In normal cases when an HTTP server fails to
786 deliver a document, it returns an HTML document stating so
787 (which often also describes why and more). This flag will pre‐
788 vent curl from outputting that and return error 22.
789
790 This method is not fail-safe and there are occasions where non-
791 successful response codes will slip through, especially when
792 authentication is involved (response codes 401 and 407).
793
794 --false-start
795 (TLS) Tells curl to use false start during the TLS handshake.
796 False start is a mode where a TLS client will start sending
797 application data before verifying the server's Finished message,
798 thus saving a round trip when performing a full handshake.
799
800 This is currently only implemented in the NSS and Secure Trans‐
801 port (on iOS 7.0 or later, or OS X 10.9 or later) backends.
802
803 Added in 7.42.0.
804
805 --form-string <name=string>
806 (HTTP SMTP IMAP) Similar to -F, --form except that the value
807 string for the named parameter is used literally. Leading '@'
808 and '<' characters, and the ';type=' string in the value have no
809 special meaning. Use this in preference to -F, --form if there's
810 any possibility that the string value may accidentally trigger
811 the '@' or '<' features of -F, --form.
812
813 See also -F, --form.
814
815 -F, --form <name=content>
816 (HTTP SMTP IMAP) For HTTP protocol family, this lets curl emu‐
817 late a filled-in form in which a user has pressed the submit
818 button. This causes curl to POST data using the Content-Type
819 multipart/form-data according to RFC 2388.
820
821 For SMTP and IMAP protocols, this is the mean to compose a mul‐
822 tipart mail message to transmit.
823
824 This enables uploading of binary files etc. To force the 'con‐
825 tent' part to be a file, prefix the file name with an @ sign. To
826 just get the content part from a file, prefix the file name with
827 the symbol <. The difference between @ and < is then that @
828 makes a file get attached in the post as a file upload, while
829 the < makes a text field and just get the contents for that text
830 field from a file.
831
832 Tell curl to read content from stdin instead of a file by using
833 - as filename. This goes for both @ and < constructs. When stdin
834 is used, the contents is buffered in memory first by curl to
835 determine its size and allow a possible resend. Defining a
836 part's data from a named non-regular file (such as a named pipe
837 or similar) is unfortunately not subject to buffering and will
838 be effectively read at transmission time; since the full size is
839 unknown before the transfer starts, such data is sent as chunks
840 by HTTP and rejected by IMAP.
841
842 Example: send an image to an HTTP server, where 'profile' is the
843 name of the form-field to which the file portrait.jpg will be
844 the input:
845
846 curl -F profile=@portrait.jpg https://example.com/upload.cgi
847
848 Example: send a your name and shoe size in two text fields to
849 the server:
850
851 curl -F name=John -F shoesize=11 https://example.com/
852
853 Example: send a your essay in a text field to the server. Send
854 it as a plain text field, but get the contents for it from a
855 local file:
856
857 curl -F "story=<hugefile.txt" https://example.com/
858
859 You can also tell curl what Content-Type to use by using
860 'type=', in a manner similar to:
861
862 curl -F "web=@index.html;type=text/html" example.com
863
864 or
865
866 curl -F "name=daniel;type=text/foo" example.com
867
868 You can also explicitly change the name field of a file upload
869 part by setting filename=, like this:
870
871 curl -F "file=@localfile;filename=nameinpost" example.com
872
873 If filename/path contains ',' or ';', it must be quoted by dou‐
874 ble-quotes like:
875
876 curl -F "file=@\"localfile\";filename=\"nameinpost\"" exam‐
877 ple.com
878
879 or
880
881 curl -F 'file=@"localfile";filename="nameinpost"' example.com
882
883 Note that if a filename/path is quoted by double-quotes, any
884 double-quote or backslash within the filename must be escaped by
885 backslash.
886
887 Quoting must also be applied to non-file data if it contains
888 semicolons, leading/trailing spaces or leading double quotes:
889
890 curl -F 'colors="red; green; blue";type=text/x-myapp' exam‐
891 ple.com
892
893 You can add custom headers to the field by setting headers=,
894 like
895
896 curl -F "submit=OK;headers=\"X-submit-type: OK\"" example.com
897
898 or
899
900 curl -F "submit=OK;headers=@headerfile" example.com
901
902 The headers= keyword may appear more that once and above notes
903 about quoting apply. When headers are read from a file, Empty
904 lines and lines starting with '#' are comments and ignored; each
905 header can be folded by splitting between two words and starting
906 the continuation line with a space; embedded carriage-returns
907 and trailing spaces are stripped. Here is an example of a
908 header file contents:
909
910 # This file contain two headers.
911 X-header-1: this is a header
912
913 # The following header is folded.
914 X-header-2: this is
915 another header
916
917
918 To support sending multipart mail messages, the syntax is
919 extended as follows:
920 - name can be omitted: the equal sign is the first character of
921 the argument,
922 - if data starts with '(', this signals to start a new multi‐
923 part: it can be followed by a content type specification.
924 - a multipart can be terminated with a '=)' argument.
925
926 Example: the following command sends an SMTP mime e-mail con‐
927 sisting in an inline part in two alternative formats: plain text
928 and HTML. It attaches a text file:
929
930 curl -F '=(;type=multipart/alternative' \
931 -F '=plain text message' \
932 -F '= <body>HTML message</body>;type=text/html' \
933 -F '=)' -F '=@textfile.txt' ... smtp://example.com
934
935 Data can be encoded for transfer using encoder=. Available
936 encodings are binary and 8bit that do nothing else than adding
937 the corresponding Content-Transfer-Encoding header, 7bit that
938 only rejects 8-bit characters with a transfer error, quoted-
939 printable and base64 that encodes data according to the corre‐
940 sponding schemes, limiting lines length to 76 characters.
941
942 Example: send multipart mail with a quoted-printable text mes‐
943 sage and a base64 attached file:
944
945 curl -F '=text message;encoder=quoted-printable' \
946 -F '=@localfile;encoder=base64' ... smtp://example.com
947
948 See further examples and details in the MANUAL.
949
950 This option can be used multiple times.
951
952 This option overrides -d, --data and -I, --head and -T,
953 --upload-file.
954
955 --ftp-account <data>
956 (FTP) When an FTP server asks for "account data" after user name
957 and password has been provided, this data is sent off using the
958 ACCT command.
959
960 If this option is used several times, the last one will be used.
961
962 Added in 7.13.0.
963
964 --ftp-alternative-to-user <command>
965 (FTP) If authenticating with the USER and PASS commands fails,
966 send this command. When connecting to Tumbleweed's Secure
967 Transport server over FTPS using a client certificate, using
968 "SITE AUTH" will tell the server to retrieve the username from
969 the certificate.
970
971 Added in 7.15.5.
972
973 --ftp-create-dirs
974 (FTP SFTP) When an FTP or SFTP URL/operation uses a path that
975 doesn't currently exist on the server, the standard behavior of
976 curl is to fail. Using this option, curl will instead attempt to
977 create missing directories.
978
979 See also --create-dirs.
980
981 --ftp-method <method>
982 (FTP) Control what method curl should use to reach a file on an
983 FTP(S) server. The method argument should be one of the follow‐
984 ing alternatives:
985
986 multicwd
987 curl does a single CWD operation for each path part in
988 the given URL. For deep hierarchies this means very many
989 commands. This is how RFC 1738 says it should be done.
990 This is the default but the slowest behavior.
991
992 nocwd curl does no CWD at all. curl will do SIZE, RETR, STOR
993 etc and give a full path to the server for all these com‐
994 mands. This is the fastest behavior.
995
996 singlecwd
997 curl does one CWD with the full target directory and then
998 operates on the file "normally" (like in the multicwd
999 case). This is somewhat more standards compliant than
1000 'nocwd' but without the full penalty of 'multicwd'.
1001
1002 Added in 7.15.1.
1003
1004 --ftp-pasv
1005 (FTP) Use passive mode for the data connection. Passive is the
1006 internal default behavior, but using this option can be used to
1007 override a previous -P, --ftp-port option.
1008
1009 If this option is used several times, only the first one is
1010 used. Undoing an enforced passive really isn't doable but you
1011 must then instead enforce the correct -P, --ftp-port again.
1012
1013 Passive mode means that curl will try the EPSV command first and
1014 then PASV, unless --disable-epsv is used.
1015
1016 See also --disable-epsv. Added in 7.11.0.
1017
1018 -P, --ftp-port <address>
1019 (FTP) Reverses the default initiator/listener roles when con‐
1020 necting with FTP. This option makes curl use active mode. curl
1021 then tells the server to connect back to the client's specified
1022 address and port, while passive mode asks the server to setup an
1023 IP address and port for it to connect to. <address> should be
1024 one of:
1025
1026 interface
1027 e.g. "eth0" to specify which interface's IP address you
1028 want to use (Unix only)
1029
1030 IP address
1031 e.g. "192.168.10.1" to specify the exact IP address
1032
1033 host name
1034 e.g. "my.host.domain" to specify the machine
1035
1036 - make curl pick the same IP address that is already used
1037 for the control connection
1038
1039 If this option is used several times, the last one will be used. Dis‐
1040 able the use of PORT with --ftp-pasv. Disable the attempt to use the
1041 EPRT command instead of PORT by using --disable-eprt. EPRT is really
1042 PORT++.
1043
1044 Since 7.19.5, you can append ":[start]-[end]" to the right of the
1045 address, to tell curl what TCP port range to use. That means you spec‐
1046 ify a port range, from a lower to a higher number. A single number
1047 works as well, but do note that it increases the risk of failure since
1048 the port may not be available.
1049
1050 See also --ftp-pasv and --disable-eprt.
1051
1052 --ftp-pret
1053 (FTP) Tell curl to send a PRET command before PASV (and EPSV).
1054 Certain FTP servers, mainly drftpd, require this non-standard
1055 command for directory listings as well as up and downloads in
1056 PASV mode.
1057
1058 Added in 7.20.0.
1059
1060 --ftp-skip-pasv-ip
1061 (FTP) Tell curl to not use the IP address the server suggests in
1062 its response to curl's PASV command when curl connects the data
1063 connection. Instead curl will re-use the same IP address it
1064 already uses for the control connection.
1065
1066 This option has no effect if PORT, EPRT or EPSV is used instead
1067 of PASV.
1068
1069 See also --ftp-pasv. Added in 7.14.2.
1070
1071 --ftp-ssl-ccc-mode <active/passive>
1072 (FTP) Sets the CCC mode. The passive mode will not initiate the
1073 shutdown, but instead wait for the server to do it, and will not
1074 reply to the shutdown from the server. The active mode initiates
1075 the shutdown and waits for a reply from the server.
1076
1077 See also --ftp-ssl-ccc. Added in 7.16.2.
1078
1079 --ftp-ssl-ccc
1080 (FTP) Use CCC (Clear Command Channel) Shuts down the SSL/TLS
1081 layer after authenticating. The rest of the control channel com‐
1082 munication will be unencrypted. This allows NAT routers to fol‐
1083 low the FTP transaction. The default mode is passive.
1084
1085 See also --ssl and --ftp-ssl-ccc-mode. Added in 7.16.1.
1086
1087 --ftp-ssl-control
1088 (FTP) Require SSL/TLS for the FTP login, clear for transfer.
1089 Allows secure authentication, but non-encrypted data transfers
1090 for efficiency. Fails the transfer if the server doesn't sup‐
1091 port SSL/TLS.
1092
1093 Added in 7.16.0.
1094
1095 -G, --get
1096 When used, this option will make all data specified with -d,
1097 --data, --data-binary or --data-urlencode to be used in an HTTP
1098 GET request instead of the POST request that otherwise would be
1099 used. The data will be appended to the URL with a '?' separator.
1100
1101 If used in combination with -I, --head, the POST data will
1102 instead be appended to the URL with a HEAD request.
1103
1104 If this option is used several times, only the first one is
1105 used. This is because undoing a GET doesn't make sense, but you
1106 should then instead enforce the alternative method you prefer.
1107
1108 -g, --globoff
1109 This option switches off the "URL globbing parser". When you set
1110 this option, you can specify URLs that contain the letters {}[]
1111 without having them being interpreted by curl itself. Note that
1112 these letters are not normal legal URL contents but they should
1113 be encoded according to the URI standard.
1114
1115 --happy-eyeballs-timeout-ms <milliseconds>
1116 Happy eyeballs is an algorithm that attempts to connect to both
1117 IPv4 and IPv6 addresses for dual-stack hosts, preferring IPv6
1118 first for the number of milliseconds. If the IPv6 address cannot
1119 be connected to within that time then a connection attempt is
1120 made to the IPv4 address in parallel. The first connection to be
1121 established is the one that is used.
1122
1123 The range of suggested useful values is limited. Happy Eyeballs
1124 RFC 6555 says "It is RECOMMENDED that connection attempts be
1125 paced 150-250 ms apart to balance human factors against network
1126 load." libcurl currently defaults to 200 ms. Firefox and Chrome
1127 currently default to 300 ms.
1128
1129 If this option is used several times, the last one will be used.
1130
1131 Added in 7.59.0.
1132
1133 --haproxy-protocol
1134 (HTTP) Send a HAProxy PROXY protocol v1 header at the beginning
1135 of the connection. This is used by some load balancers and
1136 reverse proxies to indicate the client's true IP address and
1137 port.
1138
1139 This option is primarily useful when sending test requests to a
1140 service that expects this header.
1141
1142 Added in 7.60.0.
1143
1144 -I, --head
1145 (HTTP FTP FILE) Fetch the headers only! HTTP-servers feature the
1146 command HEAD which this uses to get nothing but the header of a
1147 document. When used on an FTP or FILE file, curl displays the
1148 file size and last modification time only.
1149
1150 -H, --header <header/@file>
1151 (HTTP) Extra header to include in the request when sending HTTP
1152 to a server. You may specify any number of extra headers. Note
1153 that if you should add a custom header that has the same name as
1154 one of the internal ones curl would use, your externally set
1155 header will be used instead of the internal one. This allows you
1156 to make even trickier stuff than curl would normally do. You
1157 should not replace internally set headers without knowing per‐
1158 fectly well what you're doing. Remove an internal header by giv‐
1159 ing a replacement without content on the right side of the
1160 colon, as in: -H "Host:". If you send the custom header with no-
1161 value then its header must be terminated with a semicolon, such
1162 as -H "X-Custom-Header;" to send "X-Custom-Header:".
1163
1164 curl will make sure that each header you add/replace is sent
1165 with the proper end-of-line marker, you should thus not add that
1166 as a part of the header content: do not add newlines or carriage
1167 returns, they will only mess things up for you.
1168
1169 Starting in 7.55.0, this option can take an argument in @file‐
1170 name style, which then adds a header for each line in the input
1171 file. Using @- will make curl read the header file from stdin.
1172
1173 See also the -A, --user-agent and -e, --referer options.
1174
1175 Starting in 7.37.0, you need --proxy-header to send custom head‐
1176 ers intended for a proxy.
1177
1178 Example:
1179
1180 curl -H "X-First-Name: Joe" http://example.com/
1181
1182 WARNING: headers set with this option will be set in all
1183 requests - even after redirects are followed, like when told
1184 with -L, --location. This can lead to the header being sent to
1185 other hosts than the original host, so sensitive headers should
1186 be used with caution combined with following redirects.
1187
1188 This option can be used multiple times to add/replace/remove
1189 multiple headers.
1190
1191 -h, --help
1192 Usage help. This lists all current command line options with a
1193 short description.
1194
1195 --hostpubmd5 <md5>
1196 (SFTP SCP) Pass a string containing 32 hexadecimal digits. The
1197 string should be the 128 bit MD5 checksum of the remote host's
1198 public key, curl will refuse the connection with the host unless
1199 the md5sums match.
1200
1201 Added in 7.17.1.
1202
1203 --http0.9
1204 (HTTP) Tells curl to be fine with HTTP version 0.9 response.
1205
1206 HTTP/0.9 is a completely headerless response and therefore you
1207 can also connect with this to non-HTTP servers and still get a
1208 response since curl will simply transparently downgrade - if
1209 allowed.
1210
1211 A future curl version will deny continuing if the response isn't
1212 at least HTTP/1.0 unless this option is used.
1213
1214 -0, --http1.0
1215 (HTTP) Tells curl to use HTTP version 1.0 instead of using its
1216 internally preferred HTTP version.
1217
1218 This option overrides --http1.1 and --http2.
1219
1220 --http1.1
1221 (HTTP) Tells curl to use HTTP version 1.1.
1222
1223 This option overrides -0, --http1.0 and --http2. Added in
1224 7.33.0.
1225
1226 --http2-prior-knowledge
1227 (HTTP) Tells curl to issue its non-TLS HTTP requests using
1228 HTTP/2 without HTTP/1.1 Upgrade. It requires prior knowledge
1229 that the server supports HTTP/2 straight away. HTTPS requests
1230 will still do HTTP/2 the standard way with negotiated protocol
1231 version in the TLS handshake.
1232
1233 --http2-prior-knowledge requires that the underlying libcurl was
1234 built to support HTTP/2. This option overrides --http1.1 and -0,
1235 --http1.0 and --http2. Added in 7.49.0.
1236
1237 --http2
1238 (HTTP) Tells curl to use HTTP version 2.
1239
1240 See also --no-alpn. --http2 requires that the underlying libcurl
1241 was built to support HTTP/2. This option overrides --http1.1 and
1242 -0, --http1.0 and --http2-prior-knowledge. Added in 7.33.0.
1243
1244 --ignore-content-length
1245 (FTP HTTP) For HTTP, Ignore the Content-Length header. This is
1246 particularly useful for servers running Apache 1.x, which will
1247 report incorrect Content-Length for files larger than 2 giga‐
1248 bytes.
1249
1250 For FTP (since 7.46.0), skip the RETR command to figure out the
1251 size before downloading a file.
1252
1253 -i, --include
1254 Include the HTTP response headers in the output. The HTTP
1255 response headers can include things like server name, cookies,
1256 date of the document, HTTP version and more...
1257
1258 To view the request headers, consider the -v, --verbose option.
1259
1260 See also -v, --verbose.
1261
1262 -k, --insecure
1263 (TLS) By default, every SSL connection curl makes is verified to
1264 be secure. This option allows curl to proceed and operate even
1265 for server connections otherwise considered insecure.
1266
1267 The server connection is verified by making sure the server's
1268 certificate contains the right name and verifies successfully
1269 using the cert store.
1270
1271 See this online resource for further details:
1272 https://curl.haxx.se/docs/sslcerts.html
1273
1274 See also --proxy-insecure and --cacert.
1275
1276 --interface <name>
1277
1278 Perform an operation using a specified interface. You can enter
1279 interface name, IP address or host name. An example could look
1280 like:
1281
1282 curl --interface eth0:1 https://www.example.com/
1283
1284 If this option is used several times, the last one will be used.
1285
1286 On Linux it can be used to specify a VRF, but the binary needs
1287 to either have CAP_NET_RAW or to be run as root. More informa‐
1288 tion about Linux VRF: https://www.kernel.org/doc/Documenta‐
1289 tion/networking/vrf.txt
1290
1291 See also --dns-interface.
1292
1293 -4, --ipv4
1294 This option tells curl to resolve names to IPv4 addresses only,
1295 and not for example try IPv6.
1296
1297 See also --http1.1 and --http2. This option overrides -6,
1298 --ipv6.
1299
1300 -6, --ipv6
1301 This option tells curl to resolve names to IPv6 addresses only,
1302 and not for example try IPv4.
1303
1304 See also --http1.1 and --http2. This option overrides -4,
1305 --ipv4.
1306
1307 -j, --junk-session-cookies
1308 (HTTP) When curl is told to read cookies from a given file, this
1309 option will make it discard all "session cookies". This will
1310 basically have the same effect as if a new session is started.
1311 Typical browsers always discard session cookies when they're
1312 closed down.
1313
1314 See also -b, --cookie and -c, --cookie-jar.
1315
1316 --keepalive-time <seconds>
1317 This option sets the time a connection needs to remain idle
1318 before sending keepalive probes and the time between individual
1319 keepalive probes. It is currently effective on operating systems
1320 offering the TCP_KEEPIDLE and TCP_KEEPINTVL socket options
1321 (meaning Linux, recent AIX, HP-UX and more). This option has no
1322 effect if --no-keepalive is used.
1323
1324 If this option is used several times, the last one will be used.
1325 If unspecified, the option defaults to 60 seconds.
1326
1327 Added in 7.18.0.
1328
1329 --key-type <type>
1330 (TLS) Private key file type. Specify which type your --key pro‐
1331 vided private key is. DER, PEM, and ENG are supported. If not
1332 specified, PEM is assumed.
1333
1334 If this option is used several times, the last one will be used.
1335
1336 --key <key>
1337 (TLS SSH) Private key file name. Allows you to provide your pri‐
1338 vate key in this separate file. For SSH, if not specified, curl
1339 tries the following candidates in order:
1340
1341 If curl is built against OpenSSL library, and the engine pkcs11
1342 is available, then a PKCS#11 URI (RFC 7512) can be used to spec‐
1343 ify a private key located in a PKCS#11 device. A string begin‐
1344 ning with "pkcs11:" will be interpreted as a PKCS#11 URI. If a
1345 PKCS#11 URI is provided, then the --engine option will be set as
1346 "pkcs11" if none was provided and the --key-type option will be
1347 set as "ENG" if none was provided.
1348
1349 If this option is used several times, the last one will be used.
1350
1351 --krb <level>
1352 (FTP) Enable Kerberos authentication and use. The level must be
1353 entered and should be one of 'clear', 'safe', 'confidential', or
1354 'private'. Should you use a level that is not one of these,
1355 'private' will instead be used.
1356
1357 If this option is used several times, the last one will be used.
1358
1359 --krb requires that the underlying libcurl was built to support
1360 Kerberos.
1361
1362 --libcurl <file>
1363 Append this option to any ordinary curl command line, and you
1364 will get a libcurl-using C source code written to the file that
1365 does the equivalent of what your command-line operation does!
1366
1367 If this option is used several times, the last given file name
1368 will be used.
1369
1370 Added in 7.16.1.
1371
1372 --limit-rate <speed>
1373 Specify the maximum transfer rate you want curl to use - for
1374 both downloads and uploads. This feature is useful if you have a
1375 limited pipe and you'd like your transfer not to use your entire
1376 bandwidth. To make it slower than it otherwise would be.
1377
1378 The given speed is measured in bytes/second, unless a suffix is
1379 appended. Appending 'k' or 'K' will count the number as kilo‐
1380 bytes, 'm' or 'M' makes it megabytes, while 'g' or 'G' makes it
1381 gigabytes. Examples: 200K, 3m and 1G.
1382
1383 If you also use the -Y, --speed-limit option, that option will
1384 take precedence and might cripple the rate-limiting slightly, to
1385 help keeping the speed-limit logic working.
1386
1387 If this option is used several times, the last one will be used.
1388
1389 -l, --list-only
1390 (FTP POP3) (FTP) When listing an FTP directory, this switch
1391 forces a name-only view. This is especially useful if the user
1392 wants to machine-parse the contents of an FTP directory since
1393 the normal directory view doesn't use a standard look or format.
1394 When used like this, the option causes a NLST command to be sent
1395 to the server instead of LIST.
1396
1397 Note: Some FTP servers list only files in their response to
1398 NLST; they do not include sub-directories and symbolic links.
1399
1400 (POP3) When retrieving a specific email from POP3, this switch
1401 forces a LIST command to be performed instead of RETR. This is
1402 particularly useful if the user wants to see if a specific mes‐
1403 sage id exists on the server and what size it is.
1404
1405 Note: When combined with -X, --request, this option can be used
1406 to send an UIDL command instead, so the user may use the email's
1407 unique identifier rather than it's message id to make the
1408 request.
1409
1410 Added in 7.21.5.
1411
1412 --local-port <num/range>
1413 Set a preferred single number or range (FROM-TO) of local port
1414 numbers to use for the connection(s). Note that port numbers by
1415 nature are a scarce resource that will be busy at times so set‐
1416 ting this range to something too narrow might cause unnecessary
1417 connection setup failures.
1418
1419 Added in 7.15.2.
1420
1421 --location-trusted
1422 (HTTP) Like -L, --location, but will allow sending the name +
1423 password to all hosts that the site may redirect to. This may or
1424 may not introduce a security breach if the site redirects you to
1425 a site to which you'll send your authentication info (which is
1426 plaintext in the case of HTTP Basic authentication).
1427
1428 See also -u, --user.
1429
1430 -L, --location
1431 (HTTP) If the server reports that the requested page has moved
1432 to a different location (indicated with a Location: header and a
1433 3XX response code), this option will make curl redo the request
1434 on the new place. If used together with -i, --include or -I,
1435 --head, headers from all requested pages will be shown. When
1436 authentication is used, curl only sends its credentials to the
1437 initial host. If a redirect takes curl to a different host, it
1438 won't be able to intercept the user+password. See also --loca‐
1439 tion-trusted on how to change this. You can limit the amount of
1440 redirects to follow by using the --max-redirs option.
1441
1442 When curl follows a redirect and the request is not a plain GET
1443 (for example POST or PUT), it will do the following request with
1444 a GET if the HTTP response was 301, 302, or 303. If the response
1445 code was any other 3xx code, curl will re-send the following
1446 request using the same unmodified method.
1447
1448 You can tell curl to not change the non-GET request method to
1449 GET after a 30x response by using the dedicated options for
1450 that: --post301, --post302 and --post303.
1451
1452 --login-options <options>
1453 (IMAP POP3 SMTP) Specify the login options to use during server
1454 authentication.
1455
1456 You can use the login options to specify protocol specific
1457 options that may be used during authentication. At present only
1458 IMAP, POP3 and SMTP support login options. For more information
1459 about the login options please see RFC 2384, RFC 5092 and IETF
1460 draft draft-earhart-url-smtp-00.txt
1461
1462 If this option is used several times, the last one will be used.
1463
1464 Added in 7.34.0.
1465
1466 --mail-auth <address>
1467 (SMTP) Specify a single address. This will be used to specify
1468 the authentication address (identity) of a submitted message
1469 that is being relayed to another server.
1470
1471 See also --mail-rcpt and --mail-from. Added in 7.25.0.
1472
1473 --mail-from <address>
1474 (SMTP) Specify a single address that the given mail should get
1475 sent from.
1476
1477 See also --mail-rcpt and --mail-auth. Added in 7.20.0.
1478
1479 --mail-rcpt <address>
1480 (SMTP) Specify a single address, user name or mailing list name.
1481 Repeat this option several times to send to multiple recipients.
1482
1483 When performing a mail transfer, the recipient should specify a
1484 valid email address to send the mail to.
1485
1486 When performing an address verification (VRFY command), the
1487 recipient should be specified as the user name or user name and
1488 domain (as per Section 3.5 of RFC5321). (Added in 7.34.0)
1489
1490 When performing a mailing list expand (EXPN command), the recip‐
1491 ient should be specified using the mailing list name, such as
1492 "Friends" or "London-Office". (Added in 7.34.0)
1493
1494 Added in 7.20.0.
1495
1496 -M, --manual
1497 Manual. Display the huge help text.
1498
1499 --max-filesize <bytes>
1500 Specify the maximum size (in bytes) of a file to download. If
1501 the file requested is larger than this value, the transfer will
1502 not start and curl will return with exit code 63.
1503
1504 A size modifier may be used. For example, Appending 'k' or 'K'
1505 will count the number as kilobytes, 'm' or 'M' makes it
1506 megabytes, while 'g' or 'G' makes it gigabytes. Examples: 200K,
1507 3m and 1G. (Added in 7.58.0)
1508
1509 NOTE: The file size is not always known prior to download, and
1510 for such files this option has no effect even if the file trans‐
1511 fer ends up being larger than this given limit. This concerns
1512 both FTP and HTTP transfers.
1513
1514 See also --limit-rate.
1515
1516 --max-redirs <num>
1517 (HTTP) Set maximum number of redirection-followings allowed.
1518 When -L, --location is used, is used to prevent curl from fol‐
1519 lowing redirections "in absurdum". By default, the limit is set
1520 to 50 redirections. Set this option to -1 to make it unlimited.
1521
1522 If this option is used several times, the last one will be used.
1523
1524 -m, --max-time <seconds>
1525 Maximum time in seconds that you allow the whole operation to
1526 take. This is useful for preventing your batch jobs from hang‐
1527 ing for hours due to slow networks or links going down. Since
1528 7.32.0, this option accepts decimal values, but the actual time‐
1529 out will decrease in accuracy as the specified timeout increases
1530 in decimal precision.
1531
1532 If this option is used several times, the last one will be used.
1533
1534 See also --connect-timeout.
1535
1536 --metalink
1537 This option can tell curl to parse and process a given URI as
1538 Metalink file (both version 3 and 4 (RFC 5854) are supported)
1539 and make use of the mirrors listed within for failover if there
1540 are errors (such as the file or server not being available). It
1541 will also verify the hash of the file after the download com‐
1542 pletes. The Metalink file itself is downloaded and processed in
1543 memory and not stored in the local file system.
1544
1545 Example to use a remote Metalink file:
1546
1547 curl --metalink http://www.example.com/example.metalink
1548
1549 To use a Metalink file in the local file system, use FILE proto‐
1550 col (file://):
1551
1552 curl --metalink file://example.metalink
1553
1554 Please note that if FILE protocol is disabled, there is no way
1555 to use a local Metalink file at the time of this writing. Also
1556 note that if --metalink and -i, --include are used together,
1557 --include will be ignored. This is because including headers in
1558 the response will break Metalink parser and if the headers are
1559 included in the file described in Metalink file, hash check will
1560 fail.
1561
1562 --metalink requires that the underlying libcurl was built to
1563 support metalink. Added in 7.27.0.
1564
1565 --negotiate
1566 (HTTP) Enables Negotiate (SPNEGO) authentication.
1567
1568 This option requires a library built with GSS-API or SSPI sup‐
1569 port. Use -V, --version to see if your curl supports GSS-
1570 API/SSPI or SPNEGO.
1571
1572 When using this option, you must also provide a fake -u, --user
1573 option to activate the authentication code properly. Sending a
1574 '-u :' is enough as the user name and password from the -u,
1575 --user option aren't actually used.
1576
1577 If this option is used several times, only the first one is
1578 used.
1579
1580 See also --basic and --ntlm and --anyauth and --proxy-negotiate.
1581
1582 --netrc-file <filename>
1583 This option is similar to -n, --netrc, except that you provide
1584 the path (absolute or relative) to the netrc file that curl
1585 should use. You can only specify one netrc file per invocation.
1586 If several --netrc-file options are provided, the last one will
1587 be used.
1588
1589 It will abide by --netrc-optional if specified.
1590
1591 This option overrides -n, --netrc. Added in 7.21.5.
1592
1593 --netrc-optional
1594 Very similar to -n, --netrc, but this option makes the .netrc
1595 usage optional and not mandatory as the -n, --netrc option does.
1596
1597 See also --netrc-file. This option overrides -n, --netrc.
1598
1599 -n, --netrc
1600 Makes curl scan the .netrc (_netrc on Windows) file in the
1601 user's home directory for login name and password. This is typi‐
1602 cally used for FTP on Unix. If used with HTTP, curl will enable
1603 user authentication. See netrc(5) ftp(1) for details on the file
1604 format. Curl will not complain if that file doesn't have the
1605 right permissions (it should not be either world- or group-read‐
1606 able). The environment variable "HOME" is used to find the home
1607 directory.
1608
1609 A quick and very simple example of how to setup a .netrc to
1610 allow curl to FTP to the machine host.domain.com with user name
1611 'myself' and password 'secret' should look similar to:
1612
1613 machine host.domain.com login myself password secret
1614
1615 -:, --next
1616 Tells curl to use a separate operation for the following URL and
1617 associated options. This allows you to send several URL
1618 requests, each with their own specific options, for example,
1619 such as different user names or custom requests for each.
1620
1621 -:, --next will reset all local options and only global ones
1622 will have their values survive over to the operation following
1623 the -:, --next instruction. Global options include -v, --ver‐
1624 bose, --trace, --trace-ascii and --fail-early.
1625
1626 For example, you can do both a GET and a POST in a single com‐
1627 mand line:
1628
1629 curl www1.example.com --next -d postthis www2.example.com
1630
1631 Added in 7.36.0.
1632
1633 --no-alpn
1634 (HTTPS) Disable the ALPN TLS extension. ALPN is enabled by
1635 default if libcurl was built with an SSL library that supports
1636 ALPN. ALPN is used by a libcurl that supports HTTP/2 to negoti‐
1637 ate HTTP/2 support with the server during https sessions.
1638
1639 See also --no-npn and --http2. --no-alpn requires that the
1640 underlying libcurl was built to support TLS. Added in 7.36.0.
1641
1642 -N, --no-buffer
1643 Disables the buffering of the output stream. In normal work sit‐
1644 uations, curl will use a standard buffered output stream that
1645 will have the effect that it will output the data in chunks, not
1646 necessarily exactly when the data arrives. Using this option
1647 will disable that buffering.
1648
1649 Note that this is the negated option name documented. You can
1650 thus use --buffer to enforce the buffering.
1651
1652 --no-keepalive
1653 Disables the use of keepalive messages on the TCP connection.
1654 curl otherwise enables them by default.
1655
1656 Note that this is the negated option name documented. You can
1657 thus use --keepalive to enforce keepalive.
1658
1659 --no-npn
1660 (HTTPS) Disable the NPN TLS extension. NPN is enabled by default
1661 if libcurl was built with an SSL library that supports NPN. NPN
1662 is used by a libcurl that supports HTTP/2 to negotiate HTTP/2
1663 support with the server during https sessions.
1664
1665 See also --no-alpn and --http2. --no-npn requires that the
1666 underlying libcurl was built to support TLS. Added in 7.36.0.
1667
1668 --no-sessionid
1669 (TLS) Disable curl's use of SSL session-ID caching. By default
1670 all transfers are done using the cache. Note that while nothing
1671 should ever get hurt by attempting to reuse SSL session-IDs,
1672 there seem to be broken SSL implementations in the wild that may
1673 require you to disable this in order for you to succeed.
1674
1675 Note that this is the negated option name documented. You can
1676 thus use --sessionid to enforce session-ID caching.
1677
1678 Added in 7.16.0.
1679
1680 --noproxy <no-proxy-list>
1681 Comma-separated list of hosts which do not use a proxy, if one
1682 is specified. The only wildcard is a single * character, which
1683 matches all hosts, and effectively disables the proxy. Each name
1684 in this list is matched as either a domain which contains the
1685 hostname, or the hostname itself. For example, local.com would
1686 match local.com, local.com:80, and www.local.com, but not
1687 www.notlocal.com.
1688
1689 Since 7.53.0, This option overrides the environment variables
1690 that disable the proxy. If there's an environment variable dis‐
1691 abling a proxy, you can set noproxy list to "" to override it.
1692
1693 Added in 7.19.4.
1694
1695 --ntlm-wb
1696 (HTTP) Enables NTLM much in the style --ntlm does, but hand over
1697 the authentication to the separate binary ntlmauth application
1698 that is executed when needed.
1699
1700 See also --ntlm and --proxy-ntlm.
1701
1702 --ntlm (HTTP) Enables NTLM authentication. The NTLM authentication
1703 method was designed by Microsoft and is used by IIS web servers.
1704 It is a proprietary protocol, reverse-engineered by clever peo‐
1705 ple and implemented in curl based on their efforts. This kind of
1706 behavior should not be endorsed, you should encourage everyone
1707 who uses NTLM to switch to a public and documented authentica‐
1708 tion method instead, such as Digest.
1709
1710 If you want to enable NTLM for your proxy authentication, then
1711 use --proxy-ntlm.
1712
1713 If this option is used several times, only the first one is
1714 used.
1715
1716 See also --proxy-ntlm. --ntlm requires that the underlying
1717 libcurl was built to support TLS. This option overrides --basic
1718 and --negotiate and --digest and --anyauth.
1719
1720 --oauth2-bearer <token>
1721 (IMAP POP3 SMTP) Specify the Bearer Token for OAUTH 2.0 server
1722 authentication. The Bearer Token is used in conjunction with the
1723 user name which can be specified as part of the --url or -u,
1724 --user options.
1725
1726 The Bearer Token and user name are formatted according to RFC
1727 6750.
1728
1729 If this option is used several times, the last one will be used.
1730
1731 -o, --output <file>
1732 Write output to <file> instead of stdout. If you are using {} or
1733 [] to fetch multiple documents, you can use '#' followed by a
1734 number in the <file> specifier. That variable will be replaced
1735 with the current string for the URL being fetched. Like in:
1736
1737 curl http://{one,two}.example.com -o "file_#1.txt"
1738
1739 or use several variables like:
1740
1741 curl http://{site,host}.host[1-5].com -o "#1_#2"
1742
1743 You may use this option as many times as the number of URLs you
1744 have. For example, if you specify two URLs on the same command
1745 line, you can use it like this:
1746
1747 curl -o aa example.com -o bb example.net
1748
1749 and the order of the -o options and the URLs doesn't matter,
1750 just that the first -o is for the first URL and so on, so the
1751 above command line can also be written as
1752
1753 curl example.com example.net -o aa -o bb
1754
1755 See also the --create-dirs option to create the local directo‐
1756 ries dynamically. Specifying the output as '-' (a single dash)
1757 will force the output to be done to stdout.
1758
1759 See also -O, --remote-name and --remote-name-all and -J,
1760 --remote-header-name.
1761
1762 --pass <phrase>
1763 (SSH TLS) Passphrase for the private key
1764
1765 If this option is used several times, the last one will be used.
1766
1767 --path-as-is
1768 Tell curl to not handle sequences of /../ or /./ in the given
1769 URL path. Normally curl will squash or merge them according to
1770 standards but with this option set you tell it not to do that.
1771
1772 Added in 7.42.0.
1773
1774 --pinnedpubkey <hashes>
1775 (TLS) Tells curl to use the specified public key file (or
1776 hashes) to verify the peer. This can be a path to a file which
1777 contains a single public key in PEM or DER format, or any number
1778 of base64 encoded sha256 hashes preceded by ´sha256//´ and sepa‐
1779 rated by ´;´
1780
1781 When negotiating a TLS or SSL connection, the server sends a
1782 certificate indicating its identity. A public key is extracted
1783 from this certificate and if it does not exactly match the pub‐
1784 lic key provided to this option, curl will abort the connection
1785 before sending or receiving any data.
1786
1787 PEM/DER support:
1788 7.39.0: OpenSSL, GnuTLS and GSKit
1789 7.43.0: NSS and wolfSSL/CyaSSL
1790 7.47.0: mbedtls
1791 7.49.0: PolarSSL sha256 support:
1792 7.44.0: OpenSSL, GnuTLS, NSS and wolfSSL/CyaSSL.
1793 7.47.0: mbedtls
1794 7.49.0: PolarSSL Other SSL backends not supported.
1795
1796 If this option is used several times, the last one will be used.
1797
1798 --post301
1799 (HTTP) Tells curl to respect RFC 7231/6.4.2 and not convert POST
1800 requests into GET requests when following a 301 redirection. The
1801 non-RFC behaviour is ubiquitous in web browsers, so curl does
1802 the conversion by default to maintain consistency. However, a
1803 server may require a POST to remain a POST after such a redi‐
1804 rection. This option is meaningful only when using -L, --loca‐
1805 tion.
1806
1807 See also --post302 and --post303 and -L, --location. Added in
1808 7.17.1.
1809
1810 --post302
1811 (HTTP) Tells curl to respect RFC 7231/6.4.3 and not convert POST
1812 requests into GET requests when following a 302 redirection. The
1813 non-RFC behaviour is ubiquitous in web browsers, so curl does
1814 the conversion by default to maintain consistency. However, a
1815 server may require a POST to remain a POST after such a redi‐
1816 rection. This option is meaningful only when using -L, --loca‐
1817 tion.
1818
1819 See also --post301 and --post303 and -L, --location. Added in
1820 7.19.1.
1821
1822 --post303
1823 (HTTP) Tells curl to violate RFC 7231/6.4.4 and not convert POST
1824 requests into GET requests when following 303 redirections. A
1825 server may require a POST to remain a POST after a 303 redirect‐
1826 ion. This option is meaningful only when using -L, --location.
1827
1828 See also --post302 and --post301 and -L, --location. Added in
1829 7.26.0.
1830
1831 --preproxy [protocol://]host[:port]
1832 Use the specified SOCKS proxy before connecting to an HTTP or
1833 HTTPS -x, --proxy. In such a case curl first connects to the
1834 SOCKS proxy and then connects (through SOCKS) to the HTTP or
1835 HTTPS proxy. Hence pre proxy.
1836
1837 The pre proxy string should be specified with a protocol:// pre‐
1838 fix to specify alternative proxy protocols. Use socks4://,
1839 socks4a://, socks5:// or socks5h:// to request the specific
1840 SOCKS version to be used. No protocol specified will make curl
1841 default to SOCKS4.
1842
1843 If the port number is not specified in the proxy string, it is
1844 assumed to be 1080.
1845
1846 User and password that might be provided in the proxy string are
1847 URL decoded by curl. This allows you to pass in special charac‐
1848 ters such as @ by using %40 or pass in a colon with %3a.
1849
1850 If this option is used several times, the last one will be used.
1851
1852 Added in 7.52.0.
1853
1854 -#, --progress-bar
1855 Make curl display transfer progress as a simple progress bar
1856 instead of the standard, more informational, meter.
1857
1858 This progress bar draws a single line of '#' characters across
1859 the screen and shows a percentage if the transfer size is known.
1860 For transfers without a known size, there will be space ship
1861 (-=o=-) that moves back and forth but only while data is being
1862 transferred, with a set of flying hash sign symbols on top.
1863
1864 --proto-default <protocol>
1865 Tells curl to use protocol for any URL missing a scheme name.
1866
1867 Example:
1868
1869 curl --proto-default https ftp.mozilla.org
1870
1871 An unknown or unsupported protocol causes error CURLE_UNSUP‐
1872 PORTED_PROTOCOL (1).
1873
1874 This option does not change the default proxy protocol (http).
1875
1876 Without this option curl would make a guess based on the host,
1877 see --url for details.
1878
1879 Added in 7.45.0.
1880
1881 --proto-redir <protocols>
1882 Tells curl to limit what protocols it may use on redirect. Pro‐
1883 tocols denied by --proto are not overridden by this option. See
1884 --proto for how protocols are represented.
1885
1886 Example, allow only HTTP and HTTPS on redirect:
1887
1888 curl --proto-redir -all,http,https http://example.com
1889
1890 By default curl will allow all protocols on redirect except sev‐
1891 eral disabled for security reasons: Since 7.19.4 FILE and SCP
1892 are disabled, and since 7.40.0 SMB and SMBS are also disabled.
1893 Specifying all or +all enables all protocols on redirect,
1894 including those disabled for security.
1895
1896 Added in 7.20.2.
1897
1898 --proto <protocols>
1899 Tells curl to limit what protocols it may use in the transfer.
1900 Protocols are evaluated left to right, are comma separated, and
1901 are each a protocol name or
1902
1903 + Permit this protocol in addition to protocols already permit‐
1904 ted (this is the default if no modifier is used).
1905
1906 - Deny this protocol, removing it from the list of protocols
1907 already permitted.
1908
1909 = Permit only this protocol (ignoring the list already permit‐
1910 ted), though subject to later modification by subsequent
1911 entries in the comma separated list.
1912
1913 For example:
1914
1915 --proto -ftps uses the default protocols, but disables ftps
1916
1917 --proto -all,https,+http
1918 only enables http and https
1919
1920 --proto =http,https
1921 also only enables http and https
1922
1923 Unknown protocols produce a warning. This allows scripts to safely rely
1924 on being able to disable potentially dangerous protocols, without rely‐
1925 ing upon support for that protocol being built into curl to avoid an
1926 error.
1927
1928 This option can be used multiple times, in which case the effect is the
1929 same as concatenating the protocols into one instance of the option.
1930
1931 See also --proto-redir and --proto-default. Added in 7.20.2.
1932
1933 --proxy-anyauth
1934 Tells curl to pick a suitable authentication method when commu‐
1935 nicating with the given HTTP proxy. This might cause an extra
1936 request/response round-trip.
1937
1938 See also -x, --proxy and --proxy-basic and --proxy-digest. Added
1939 in 7.13.2.
1940
1941 --proxy-basic
1942 Tells curl to use HTTP Basic authentication when communicating
1943 with the given proxy. Use --basic for enabling HTTP Basic with a
1944 remote host. Basic is the default authentication method curl
1945 uses with proxies.
1946
1947 See also -x, --proxy and --proxy-anyauth and --proxy-digest.
1948
1949 --proxy-cacert <file>
1950 Same as --cacert but used in HTTPS proxy context.
1951
1952 See also --proxy-capath and --cacert and --capath and -x,
1953 --proxy. Added in 7.52.0.
1954
1955 --proxy-capath <dir>
1956 Same as --capath but used in HTTPS proxy context.
1957
1958 See also --proxy-cacert and -x, --proxy and --capath. Added in
1959 7.52.0.
1960
1961 --proxy-cert-type <type>
1962 Same as --cert-type but used in HTTPS proxy context.
1963
1964 Added in 7.52.0.
1965
1966 --proxy-cert <cert[:passwd]>
1967 Same as -E, --cert but used in HTTPS proxy context.
1968
1969 Added in 7.52.0.
1970
1971 --proxy-ciphers <list>
1972 Same as --ciphers but used in HTTPS proxy context.
1973
1974 Added in 7.52.0.
1975
1976 --proxy-crlfile <file>
1977 Same as --crlfile but used in HTTPS proxy context.
1978
1979 Added in 7.52.0.
1980
1981 --proxy-digest
1982 Tells curl to use HTTP Digest authentication when communicating
1983 with the given proxy. Use --digest for enabling HTTP Digest with
1984 a remote host.
1985
1986 See also -x, --proxy and --proxy-anyauth and --proxy-basic.
1987
1988 --proxy-header <header/@file>
1989 (HTTP) Extra header to include in the request when sending HTTP
1990 to a proxy. You may specify any number of extra headers. This is
1991 the equivalent option to -H, --header but is for proxy communi‐
1992 cation only like in CONNECT requests when you want a separate
1993 header sent to the proxy to what is sent to the actual remote
1994 host.
1995
1996 curl will make sure that each header you add/replace is sent
1997 with the proper end-of-line marker, you should thus not add that
1998 as a part of the header content: do not add newlines or carriage
1999 returns, they will only mess things up for you.
2000
2001 Headers specified with this option will not be included in
2002 requests that curl knows will not be sent to a proxy.
2003
2004 Starting in 7.55.0, this option can take an argument in @file‐
2005 name style, which then adds a header for each line in the input
2006 file. Using @- will make curl read the header file from stdin.
2007
2008 This option can be used multiple times to add/replace/remove
2009 multiple headers.
2010
2011 Added in 7.37.0.
2012
2013 --proxy-insecure
2014 Same as -k, --insecure but used in HTTPS proxy context.
2015
2016 Added in 7.52.0.
2017
2018 --proxy-key-type <type>
2019 Same as --key-type but used in HTTPS proxy context.
2020
2021 Added in 7.52.0.
2022
2023 --proxy-key <key>
2024 Same as --key but used in HTTPS proxy context.
2025
2026 --proxy-negotiate
2027 Tells curl to use HTTP Negotiate (SPNEGO) authentication when
2028 communicating with the given proxy. Use --negotiate for enabling
2029 HTTP Negotiate (SPNEGO) with a remote host.
2030
2031 See also --proxy-anyauth and --proxy-basic. Added in 7.17.1.
2032
2033 --proxy-ntlm
2034 Tells curl to use HTTP NTLM authentication when communicating
2035 with the given proxy. Use --ntlm for enabling NTLM with a remote
2036 host.
2037
2038 See also --proxy-negotiate and --proxy-anyauth.
2039
2040 --proxy-pass <phrase>
2041 Same as --pass but used in HTTPS proxy context.
2042
2043 Added in 7.52.0.
2044
2045 --proxy-pinnedpubkey <hashes>
2046 (TLS) Tells curl to use the specified public key file (or
2047 hashes) to verify the proxy. This can be a path to a file which
2048 contains a single public key in PEM or DER format, or any number
2049 of base64 encoded sha256 hashes preceded by ´sha256//´ and sepa‐
2050 rated by ´;´
2051
2052 When negotiating a TLS or SSL connection, the server sends a
2053 certificate indicating its identity. A public key is extracted
2054 from this certificate and if it does not exactly match the pub‐
2055 lic key provided to this option, curl will abort the connection
2056 before sending or receiving any data.
2057
2058 If this option is used several times, the last one will be used.
2059
2060 --proxy-service-name <name>
2061 This option allows you to change the service name for proxy
2062 negotiation.
2063
2064 Added in 7.43.0.
2065
2066 --proxy-ssl-allow-beast
2067 Same as --ssl-allow-beast but used in HTTPS proxy context.
2068
2069 Added in 7.52.0.
2070
2071 --proxy-tls13-ciphers <ciphersuite list>
2072 (TLS) Specifies which cipher suites to use in the connection to
2073 your HTTPS proxy when it negotiates TLS 1.3. The list of ciphers
2074 suites must specify valid ciphers. Read up on TLS 1.3 cipher
2075 suite details on this URL:
2076
2077 https://curl.haxx.se/docs/ssl-ciphers.html
2078
2079 If this option is used several times, the last one will be used.
2080
2081 --proxy-tlsauthtype <type>
2082 Same as --tlsauthtype but used in HTTPS proxy context.
2083
2084 Added in 7.52.0.
2085
2086 --proxy-tlspassword <string>
2087 Same as --tlspassword but used in HTTPS proxy context.
2088
2089 Added in 7.52.0.
2090
2091 --proxy-tlsuser <name>
2092 Same as --tlsuser but used in HTTPS proxy context.
2093
2094 Added in 7.52.0.
2095
2096 --proxy-tlsv1
2097 Same as -1, --tlsv1 but used in HTTPS proxy context.
2098
2099 Added in 7.52.0.
2100
2101 -U, --proxy-user <user:password>
2102 Specify the user name and password to use for proxy authentica‐
2103 tion.
2104
2105 If you use a Windows SSPI-enabled curl binary and do either
2106 Negotiate or NTLM authentication then you can tell curl to
2107 select the user name and password from your environment by spec‐
2108 ifying a single colon with this option: "-U :".
2109
2110 If this option is used several times, the last one will be used.
2111
2112 -x, --proxy [protocol://]host[:port]
2113 Use the specified proxy.
2114
2115 The proxy string can be specified with a protocol:// prefix. No
2116 protocol specified or http:// will be treated as HTTP proxy. Use
2117 socks4://, socks4a://, socks5:// or socks5h:// to request a spe‐
2118 cific SOCKS version to be used. (The protocol support was added
2119 in curl 7.21.7)
2120
2121 HTTPS proxy support via https:// protocol prefix was added in
2122 7.52.0 for OpenSSL, GnuTLS and NSS.
2123
2124 Unrecognized and unsupported proxy protocols cause an error
2125 since 7.52.0. Prior versions may ignore the protocol and use
2126 http:// instead.
2127
2128 If the port number is not specified in the proxy string, it is
2129 assumed to be 1080.
2130
2131 This option overrides existing environment variables that set
2132 the proxy to use. If there's an environment variable setting a
2133 proxy, you can set proxy to "" to override it.
2134
2135 All operations that are performed over an HTTP proxy will trans‐
2136 parently be converted to HTTP. It means that certain protocol
2137 specific operations might not be available. This is not the case
2138 if you can tunnel through the proxy, as one with the -p, --prox‐
2139 ytunnel option.
2140
2141 User and password that might be provided in the proxy string are
2142 URL decoded by curl. This allows you to pass in special charac‐
2143 ters such as @ by using %40 or pass in a colon with %3a.
2144
2145 The proxy host can be specified the exact same way as the proxy
2146 environment variables, including the protocol prefix (http://)
2147 and the embedded user + password.
2148
2149 If this option is used several times, the last one will be used.
2150
2151 --proxy1.0 <host[:port]>
2152 Use the specified HTTP 1.0 proxy. If the port number is not
2153 specified, it is assumed at port 1080.
2154
2155 The only difference between this and the HTTP proxy option -x,
2156 --proxy, is that attempts to use CONNECT through the proxy will
2157 specify an HTTP 1.0 protocol instead of the default HTTP 1.1.
2158
2159 -p, --proxytunnel
2160 When an HTTP proxy is used -x, --proxy, this option will cause
2161 non-HTTP protocols to attempt to tunnel through the proxy
2162 instead of merely using it to do HTTP-like operations. The tun‐
2163 nel approach is made with the HTTP proxy CONNECT request and
2164 requires that the proxy allows direct connect to the remote port
2165 number curl wants to tunnel through to.
2166
2167 To suppress proxy CONNECT response headers when curl is set to
2168 output headers use --suppress-connect-headers.
2169
2170 See also -x, --proxy.
2171
2172 --pubkey <key>
2173 (SFTP SCP) Public key file name. Allows you to provide your pub‐
2174 lic key in this separate file.
2175
2176 If this option is used several times, the last one will be used.
2177
2178 (As of 7.39.0, curl attempts to automatically extract the public
2179 key from the private key file, so passing this option is gener‐
2180 ally not required. Note that this public key extraction requires
2181 libcurl to be linked against a copy of libssh2 1.2.8 or higher
2182 that is itself linked against OpenSSL.)
2183
2184 -Q, --quote
2185 (FTP SFTP) Send an arbitrary command to the remote FTP or SFTP
2186 server. Quote commands are sent BEFORE the transfer takes place
2187 (just after the initial PWD command in an FTP transfer, to be
2188 exact). To make commands take place after a successful transfer,
2189 prefix them with a dash '-'. To make commands be sent after
2190 curl has changed the working directory, just before the transfer
2191 command(s), prefix the command with a '+' (this is only sup‐
2192 ported for FTP). You may specify any number of commands.
2193
2194 If the server returns failure for one of the commands, the
2195 entire operation will be aborted. You must send syntactically
2196 correct FTP commands as RFC 959 defines to FTP servers, or one
2197 of the commands listed below to SFTP servers.
2198
2199 This option can be used multiple times. When speaking to an FTP
2200 server, prefix the command with an asterisk (*) to make curl
2201 continue even if the command fails as by default curl will stop
2202 at first failure.
2203
2204 SFTP is a binary protocol. Unlike for FTP, curl interprets SFTP
2205 quote commands itself before sending them to the server. File
2206 names may be quoted shell-style to embed spaces or special char‐
2207 acters. Following is the list of all supported SFTP quote com‐
2208 mands:
2209
2210 chgrp group file
2211 The chgrp command sets the group ID of the file named by
2212 the file operand to the group ID specified by the group
2213 operand. The group operand is a decimal integer group ID.
2214
2215 chmod mode file
2216 The chmod command modifies the file mode bits of the
2217 specified file. The mode operand is an octal integer mode
2218 number.
2219
2220 chown user file
2221 The chown command sets the owner of the file named by the
2222 file operand to the user ID specified by the user oper‐
2223 and. The user operand is a decimal integer user ID.
2224
2225 ln source_file target_file
2226 The ln and symlink commands create a symbolic link at the
2227 target_file location pointing to the source_file loca‐
2228 tion.
2229
2230 mkdir directory_name
2231 The mkdir command creates the directory named by the
2232 directory_name operand.
2233
2234 pwd The pwd command returns the absolute pathname of the cur‐
2235 rent working directory.
2236
2237 rename source target
2238 The rename command renames the file or directory named by
2239 the source operand to the destination path named by the
2240 target operand.
2241
2242 rm file
2243 The rm command removes the file specified by the file op‐
2244 erand.
2245
2246 rmdir directory
2247 The rmdir command removes the directory entry specified
2248 by the directory operand, provided it is empty.
2249
2250 symlink source_file target_file
2251 See ln.
2252
2253 --random-file <file>
2254 Specify the path name to file containing what will be considered
2255 as random data. The data may be used to seed the random engine
2256 for SSL connections. See also the --egd-file option.
2257
2258 -r, --range <range>
2259 (HTTP FTP SFTP FILE) Retrieve a byte range (i.e. a partial docu‐
2260 ment) from an HTTP/1.1, FTP or SFTP server or a local FILE.
2261 Ranges can be specified in a number of ways.
2262
2263 0-499 specifies the first 500 bytes
2264
2265 500-999 specifies the second 500 bytes
2266
2267 -500 specifies the last 500 bytes
2268
2269 9500- specifies the bytes from offset 9500 and forward
2270
2271 0-0,-1 specifies the first and last byte only(*)(HTTP)
2272
2273 100-199,500-599
2274 specifies two separate 100-byte ranges(*) (HTTP)
2275
2276 (*) = NOTE that this will cause the server to reply with a mul‐
2277 tipart response!
2278
2279 Only digit characters (0-9) are valid in the 'start' and 'stop'
2280 fields of the 'start-stop' range syntax. If a non-digit charac‐
2281 ter is given in the range, the server's response will be unspec‐
2282 ified, depending on the server's configuration.
2283
2284 You should also be aware that many HTTP/1.1 servers do not have
2285 this feature enabled, so that when you attempt to get a range,
2286 you'll instead get the whole document.
2287
2288 FTP and SFTP range downloads only support the simple 'start-
2289 stop' syntax (optionally with one of the numbers omitted). FTP
2290 use depends on the extended FTP command SIZE.
2291
2292 If this option is used several times, the last one will be used.
2293
2294 --raw (HTTP) When used, it disables all internal HTTP decoding of con‐
2295 tent or transfer encodings and instead makes them passed on
2296 unaltered, raw.
2297
2298 Added in 7.16.2.
2299
2300 -e, --referer <URL>
2301 (HTTP) Sends the "Referrer Page" information to the HTTP server.
2302 This can also be set with the -H, --header flag of course. When
2303 used with -L, --location you can append ";auto" to the -e,
2304 --referer URL to make curl automatically set the previous URL
2305 when it follows a Location: header. The ";auto" string can be
2306 used alone, even if you don't set an initial -e, --referer.
2307
2308 If this option is used several times, the last one will be used.
2309
2310 See also -A, --user-agent and -H, --header.
2311
2312 -J, --remote-header-name
2313 (HTTP) This option tells the -O, --remote-name option to use the
2314 server-specified Content-Disposition filename instead of
2315 extracting a filename from the URL.
2316
2317 If the server specifies a file name and a file with that name
2318 already exists in the current working directory it will not be
2319 overwritten and an error will occur. If the server doesn't spec‐
2320 ify a file name then this option has no effect.
2321
2322 There's no attempt to decode %-sequences (yet) in the provided
2323 file name, so this option may provide you with rather unexpected
2324 file names.
2325
2326 WARNING: Exercise judicious use of this option, especially on
2327 Windows. A rogue server could send you the name of a DLL or
2328 other file that could possibly be loaded automatically by Win‐
2329 dows or some third party software.
2330
2331 --remote-name-all
2332 This option changes the default action for all given URLs to be
2333 dealt with as if -O, --remote-name were used for each one. So if
2334 you want to disable that for a specific URL after --remote-name-
2335 all has been used, you must use "-o -" or --no-remote-name.
2336
2337 Added in 7.19.0.
2338
2339 -O, --remote-name
2340 Write output to a local file named like the remote file we get.
2341 (Only the file part of the remote file is used, the path is cut
2342 off.)
2343
2344 The file will be saved in the current working directory. If you
2345 want the file saved in a different directory, make sure you
2346 change the current working directory before invoking curl with
2347 this option.
2348
2349 The remote file name to use for saving is extracted from the
2350 given URL, nothing else, and if it already exists it will be
2351 overwritten. If you want the server to be able to choose the
2352 file name refer to -J, --remote-header-name which can be used in
2353 addition to this option. If the server chooses a file name and
2354 that name already exists it will not be overwritten.
2355
2356 There is no URL decoding done on the file name. If it has %20 or
2357 other URL encoded parts of the name, they will end up as-is as
2358 file name.
2359
2360 You may use this option as many times as the number of URLs you
2361 have.
2362
2363 -R, --remote-time
2364 When used, this will make curl attempt to figure out the time‐
2365 stamp of the remote file, and if that is available make the
2366 local file get that same timestamp.
2367
2368 --request-target
2369 (HTTP) Tells curl to use an alternative "target" (path) instead
2370 of using the path as provided in the URL. Particularly useful
2371 when wanting to issue HTTP requests without leading slash or
2372 other data that doesn't follow the regular URL pattern, like
2373 "OPTIONS *".
2374
2375 Added in 7.55.0.
2376
2377 -X, --request <command>
2378 (HTTP) Specifies a custom request method to use when communicat‐
2379 ing with the HTTP server. The specified request method will be
2380 used instead of the method otherwise used (which defaults to
2381 GET). Read the HTTP 1.1 specification for details and explana‐
2382 tions. Common additional HTTP requests include PUT and DELETE,
2383 but related technologies like WebDAV offers PROPFIND, COPY, MOVE
2384 and more.
2385
2386 Normally you don't need this option. All sorts of GET, HEAD,
2387 POST and PUT requests are rather invoked by using dedicated com‐
2388 mand line options.
2389
2390 This option only changes the actual word used in the HTTP
2391 request, it does not alter the way curl behaves. So for example
2392 if you want to make a proper HEAD request, using -X HEAD will
2393 not suffice. You need to use the -I, --head option.
2394
2395 The method string you set with -X, --request will be used for
2396 all requests, which if you for example use -L, --location may
2397 cause unintended side-effects when curl doesn't change request
2398 method according to the HTTP 30x response codes - and similar.
2399
2400 (FTP) Specifies a custom FTP command to use instead of LIST when
2401 doing file lists with FTP.
2402
2403 (POP3) Specifies a custom POP3 command to use instead of LIST or
2404 RETR. (Added in 7.26.0)
2405
2406 (IMAP) Specifies a custom IMAP command to use instead of LIST.
2407 (Added in 7.30.0)
2408
2409 (SMTP) Specifies a custom SMTP command to use instead of HELP or
2410 VRFY. (Added in 7.34.0)
2411
2412 If this option is used several times, the last one will be used.
2413
2414 --resolve <host:port:address[,address]...>
2415 Provide a custom address for a specific host and port pair.
2416 Using this, you can make the curl requests(s) use a specified
2417 address and prevent the otherwise normally resolved address to
2418 be used. Consider it a sort of /etc/hosts alternative provided
2419 on the command line. The port number should be the number used
2420 for the specific protocol the host will be used for. It means
2421 you need several entries if you want to provide address for the
2422 same host but different ports.
2423
2424 By specifying '*' as host you can tell curl to resolve any host
2425 and specific port pair to the specified address. Wildcard is
2426 resolved last so any --resolve with a specific host and port
2427 will be used first.
2428
2429 The provided address set by this option will be used even if -4,
2430 --ipv4 or -6, --ipv6 is set to make curl use another IP version.
2431
2432 Support for providing the IP address within [brackets] was added
2433 in 7.57.0.
2434
2435 Support for providing multiple IP addresses per entry was added
2436 in 7.59.0.
2437
2438 Support for resolving with wildcard was added in 7.64.0.
2439
2440 This option can be used many times to add many host names to
2441 resolve.
2442
2443 Added in 7.21.3.
2444
2445 --retry-connrefused
2446 In addition to the other conditions, consider ECONNREFUSED as a
2447 transient error too for --retry. This option is used together
2448 with --retry.
2449
2450 Added in 7.52.0.
2451
2452 --retry-delay <seconds>
2453 Make curl sleep this amount of time before each retry when a
2454 transfer has failed with a transient error (it changes the
2455 default backoff time algorithm between retries). This option is
2456 only interesting if --retry is also used. Setting this delay to
2457 zero will make curl use the default backoff time.
2458
2459 If this option is used several times, the last one will be used.
2460
2461 Added in 7.12.3.
2462
2463 --retry-max-time <seconds>
2464 The retry timer is reset before the first transfer attempt.
2465 Retries will be done as usual (see --retry) as long as the timer
2466 hasn't reached this given limit. Notice that if the timer hasn't
2467 reached the limit, the request will be made and while perform‐
2468 ing, it may take longer than this given time period. To limit a
2469 single request´s maximum time, use -m, --max-time. Set this
2470 option to zero to not timeout retries.
2471
2472 If this option is used several times, the last one will be used.
2473
2474 Added in 7.12.3.
2475
2476 --retry <num>
2477 If a transient error is returned when curl tries to perform a
2478 transfer, it will retry this number of times before giving up.
2479 Setting the number to 0 makes curl do no retries (which is the
2480 default). Transient error means either: a timeout, an FTP 4xx
2481 response code or an HTTP 408 or 5xx response code.
2482
2483 When curl is about to retry a transfer, it will first wait one
2484 second and then for all forthcoming retries it will double the
2485 waiting time until it reaches 10 minutes which then will be the
2486 delay between the rest of the retries. By using --retry-delay
2487 you disable this exponential backoff algorithm. See also
2488 --retry-max-time to limit the total time allowed for retries.
2489
2490 If this option is used several times, the last one will be used.
2491
2492 Added in 7.12.3.
2493
2494 --sasl-ir
2495 Enable initial response in SASL authentication.
2496
2497 Added in 7.31.0.
2498
2499 --service-name <name>
2500 This option allows you to change the service name for SPNEGO.
2501
2502 Examples: --negotiate --service-name sockd would use
2503 sockd/server-name.
2504
2505 Added in 7.43.0.
2506
2507 -S, --show-error
2508 When used with -s, --silent, it makes curl show an error message
2509 if it fails.
2510
2511 -s, --silent
2512 Silent or quiet mode. Don't show progress meter or error mes‐
2513 sages. Makes Curl mute. It will still output the data you ask
2514 for, potentially even to the terminal/stdout unless you redirect
2515 it.
2516
2517 Use -S, --show-error in addition to this option to disable
2518 progress meter but still show error messages.
2519
2520 See also -v, --verbose and --stderr.
2521
2522 --socks4 <host[:port]>
2523 Use the specified SOCKS4 proxy. If the port number is not speci‐
2524 fied, it is assumed at port 1080.
2525
2526 This option overrides any previous use of -x, --proxy, as they
2527 are mutually exclusive.
2528
2529 Since 7.21.7, this option is superfluous since you can specify a
2530 socks4 proxy with -x, --proxy using a socks4:// protocol prefix.
2531
2532 Since 7.52.0, --preproxy can be used to specify a SOCKS proxy at
2533 the same time -x, --proxy is used with an HTTP/HTTPS proxy. In
2534 such a case curl first connects to the SOCKS proxy and then con‐
2535 nects (through SOCKS) to the HTTP or HTTPS proxy.
2536
2537 If this option is used several times, the last one will be used.
2538
2539 Added in 7.15.2.
2540
2541 --socks4a <host[:port]>
2542 Use the specified SOCKS4a proxy. If the port number is not spec‐
2543 ified, it is assumed at port 1080.
2544
2545 This option overrides any previous use of -x, --proxy, as they
2546 are mutually exclusive.
2547
2548 Since 7.21.7, this option is superfluous since you can specify a
2549 socks4a proxy with -x, --proxy using a socks4a:// protocol pre‐
2550 fix.
2551
2552 Since 7.52.0, --preproxy can be used to specify a SOCKS proxy at
2553 the same time -x, --proxy is used with an HTTP/HTTPS proxy. In
2554 such a case curl first connects to the SOCKS proxy and then con‐
2555 nects (through SOCKS) to the HTTP or HTTPS proxy.
2556
2557 If this option is used several times, the last one will be used.
2558
2559 Added in 7.18.0.
2560
2561 --socks5-basic
2562 Tells curl to use username/password authentication when connect‐
2563 ing to a SOCKS5 proxy. The username/password authentication is
2564 enabled by default. Use --socks5-gssapi to force GSS-API
2565 authentication to SOCKS5 proxies.
2566
2567 Added in 7.55.0.
2568
2569 --socks5-gssapi-nec
2570 As part of the GSS-API negotiation a protection mode is negoti‐
2571 ated. RFC 1961 says in section 4.3/4.4 it should be protected,
2572 but the NEC reference implementation does not. The option
2573 --socks5-gssapi-nec allows the unprotected exchange of the pro‐
2574 tection mode negotiation.
2575
2576 Added in 7.19.4.
2577
2578 --socks5-gssapi-service <name>
2579 The default service name for a socks server is rcmd/server-fqdn.
2580 This option allows you to change it.
2581
2582 Examples: --socks5 proxy-name --socks5-gssapi-service sockd
2583 would use sockd/proxy-name --socks5 proxy-name --socks5-gssapi-
2584 service sockd/real-name would use sockd/real-name for cases
2585 where the proxy-name does not match the principal name.
2586
2587 Added in 7.19.4.
2588
2589 --socks5-gssapi
2590 Tells curl to use GSS-API authentication when connecting to a
2591 SOCKS5 proxy. The GSS-API authentication is enabled by default
2592 (if curl is compiled with GSS-API support). Use --socks5-basic
2593 to force username/password authentication to SOCKS5 proxies.
2594
2595 Added in 7.55.0.
2596
2597 --socks5-hostname <host[:port]>
2598 Use the specified SOCKS5 proxy (and let the proxy resolve the
2599 host name). If the port number is not specified, it is assumed
2600 at port 1080.
2601
2602 This option overrides any previous use of -x, --proxy, as they
2603 are mutually exclusive.
2604
2605 Since 7.21.7, this option is superfluous since you can specify a
2606 socks5 hostname proxy with -x, --proxy using a socks5h:// proto‐
2607 col prefix.
2608
2609 Since 7.52.0, --preproxy can be used to specify a SOCKS proxy at
2610 the same time -x, --proxy is used with an HTTP/HTTPS proxy. In
2611 such a case curl first connects to the SOCKS proxy and then con‐
2612 nects (through SOCKS) to the HTTP or HTTPS proxy.
2613
2614 If this option is used several times, the last one will be used.
2615
2616 Added in 7.18.0.
2617
2618 --socks5 <host[:port]>
2619 Use the specified SOCKS5 proxy - but resolve the host name
2620 locally. If the port number is not specified, it is assumed at
2621 port 1080.
2622
2623 This option overrides any previous use of -x, --proxy, as they
2624 are mutually exclusive.
2625
2626 Since 7.21.7, this option is superfluous since you can specify a
2627 socks5 proxy with -x, --proxy using a socks5:// protocol prefix.
2628
2629 Since 7.52.0, --preproxy can be used to specify a SOCKS proxy at
2630 the same time -x, --proxy is used with an HTTP/HTTPS proxy. In
2631 such a case curl first connects to the SOCKS proxy and then con‐
2632 nects (through SOCKS) to the HTTP or HTTPS proxy.
2633
2634 If this option is used several times, the last one will be used.
2635
2636 This option (as well as --socks4) does not work with IPV6, FTPS
2637 or LDAP.
2638
2639 Added in 7.18.0.
2640
2641 -Y, --speed-limit <speed>
2642 If a download is slower than this given speed (in bytes per sec‐
2643 ond) for speed-time seconds it gets aborted. speed-time is set
2644 with -y, --speed-time and is 30 if not set.
2645
2646 If this option is used several times, the last one will be used.
2647
2648 -y, --speed-time <seconds>
2649 If a download is slower than speed-limit bytes per second during
2650 a speed-time period, the download gets aborted. If speed-time is
2651 used, the default speed-limit will be 1 unless set with -Y,
2652 --speed-limit.
2653
2654 This option controls transfers and thus will not affect slow
2655 connects etc. If this is a concern for you, try the --connect-
2656 timeout option.
2657
2658 If this option is used several times, the last one will be used.
2659
2660 --ssl-allow-beast
2661 This option tells curl to not work around a security flaw in the
2662 SSL3 and TLS1.0 protocols known as BEAST. If this option isn't
2663 used, the SSL layer may use workarounds known to cause interop‐
2664 erability problems with some older SSL implementations. WARNING:
2665 this option loosens the SSL security, and by using this flag you
2666 ask for exactly that.
2667
2668 Added in 7.25.0.
2669
2670 --ssl-no-revoke
2671 (Schannel) This option tells curl to disable certificate revoca‐
2672 tion checks. WARNING: this option loosens the SSL security, and
2673 by using this flag you ask for exactly that.
2674
2675 Added in 7.44.0.
2676
2677 --ssl-reqd
2678 (FTP IMAP POP3 SMTP) Require SSL/TLS for the connection. Termi‐
2679 nates the connection if the server doesn't support SSL/TLS.
2680
2681 This option was formerly known as --ftp-ssl-reqd.
2682
2683 Added in 7.20.0.
2684
2685 --ssl (FTP IMAP POP3 SMTP) Try to use SSL/TLS for the connection.
2686 Reverts to a non-secure connection if the server doesn't support
2687 SSL/TLS. See also --ftp-ssl-control and --ssl-reqd for differ‐
2688 ent levels of encryption required.
2689
2690 This option was formerly known as --ftp-ssl (Added in 7.11.0).
2691 That option name can still be used but will be removed in a
2692 future version.
2693
2694 Added in 7.20.0.
2695
2696 -2, --sslv2
2697 (SSL) Forces curl to use SSL version 2 when negotiating with a
2698 remote SSL server. Sometimes curl is built without SSLv2 sup‐
2699 port. SSLv2 is widely considered insecure (see RFC 6176).
2700
2701 See also --http1.1 and --http2. -2, --sslv2 requires that the
2702 underlying libcurl was built to support TLS. This option over‐
2703 rides -3, --sslv3 and -1, --tlsv1 and --tlsv1.1 and --tlsv1.2.
2704
2705 -3, --sslv3
2706 (SSL) Forces curl to use SSL version 3 when negotiating with a
2707 remote SSL server. Sometimes curl is built without SSLv3 sup‐
2708 port. SSLv3 is widely considered insecure (see RFC 7568).
2709
2710 See also --http1.1 and --http2. -3, --sslv3 requires that the
2711 underlying libcurl was built to support TLS. This option over‐
2712 rides -2, --sslv2 and -1, --tlsv1 and --tlsv1.1 and --tlsv1.2.
2713
2714 --stderr
2715 Redirect all writes to stderr to the specified file instead. If
2716 the file name is a plain '-', it is instead written to stdout.
2717
2718 If this option is used several times, the last one will be used.
2719
2720 See also -v, --verbose and -s, --silent.
2721
2722 --styled-output
2723 Enables the automatic use of bold font styles when writing HTTP
2724 headers to the terminal. Use --no-styled-output to switch them
2725 off.
2726
2727 Added in 7.61.0.
2728
2729 --suppress-connect-headers
2730 When -p, --proxytunnel is used and a CONNECT request is made
2731 don't output proxy CONNECT response headers. This option is
2732 meant to be used with -D, --dump-header or -i, --include which
2733 are used to show protocol headers in the output. It has no
2734 effect on debug options such as -v, --verbose or --trace, or any
2735 statistics.
2736
2737 See also -D, --dump-header and -i, --include and -p, --proxytun‐
2738 nel.
2739
2740 --tcp-fastopen
2741 Enable use of TCP Fast Open (RFC7413).
2742
2743 Added in 7.49.0.
2744
2745 --tcp-nodelay
2746 Turn on the TCP_NODELAY option. See the curl_easy_setopt(3) man
2747 page for details about this option.
2748
2749 Since 7.50.2, curl sets this option by default and you need to
2750 explicitly switch it off if you don't want it on.
2751
2752 Added in 7.11.2.
2753
2754 -t, --telnet-option <opt=val>
2755 Pass options to the telnet protocol. Supported options are:
2756
2757 TTYPE=<term> Sets the terminal type.
2758
2759 XDISPLOC=<X display> Sets the X display location.
2760
2761 NEW_ENV=<var,val> Sets an environment variable.
2762
2763 --tftp-blksize <value>
2764 (TFTP) Set TFTP BLKSIZE option (must be >512). This is the block
2765 size that curl will try to use when transferring data to or from
2766 a TFTP server. By default 512 bytes will be used.
2767
2768 If this option is used several times, the last one will be used.
2769
2770 Added in 7.20.0.
2771
2772 --tftp-no-options
2773 (TFTP) Tells curl not to send TFTP options requests.
2774
2775 This option improves interop with some legacy servers that do
2776 not acknowledge or properly implement TFTP options. When this
2777 option is used --tftp-blksize is ignored.
2778
2779 Added in 7.48.0.
2780
2781 -z, --time-cond <time>
2782 (HTTP FTP) Request a file that has been modified later than the
2783 given time and date, or one that has been modified before that
2784 time. The <date expression> can be all sorts of date strings or
2785 if it doesn't match any internal ones, it is taken as a filename
2786 and tries to get the modification date (mtime) from <file>
2787 instead. See the curl_getdate(3) man pages for date expression
2788 details.
2789
2790 Start the date expression with a dash (-) to make it request for
2791 a document that is older than the given date/time, default is a
2792 document that is newer than the specified date/time.
2793
2794 If this option is used several times, the last one will be used.
2795
2796 --tls-max <VERSION>
2797 (SSL) VERSION defines maximum supported TLS version. The minimum
2798 acceptable version is set by tlsv1.0, tlsv1.1, tlsv1.2 or
2799 tlsv1.3.
2800
2801
2802 default
2803 Use up to recommended TLS version.
2804
2805 1.0 Use up to TLSv1.0.
2806
2807 1.1 Use up to TLSv1.1.
2808
2809 1.2 Use up to TLSv1.2.
2810
2811 1.3 Use up to TLSv1.3.
2812
2813 See also --tlsv1.0 and --tlsv1.1 and --tlsv1.2 and --tlsv1.3. --tls-max
2814 requires that the underlying libcurl was built to support TLS. Added in
2815 7.54.0.
2816
2817 --tls13-ciphers <list of TLS 1.3 ciphersuites>
2818 (TLS) Specifies which cipher suites to use in the connection if
2819 it negotiates TLS 1.3. The list of ciphers suites must specify
2820 valid ciphers. Read up on TLS 1.3 cipher suite details on this
2821 URL:
2822
2823 https://curl.haxx.se/docs/ssl-ciphers.html
2824
2825 If this option is used several times, the last one will be used.
2826
2827 --tlsauthtype <type>
2828 Set TLS authentication type. Currently, the only supported
2829 option is "SRP", for TLS-SRP (RFC 5054). If --tlsuser and
2830 --tlspassword are specified but --tlsauthtype is not, then this
2831 option defaults to "SRP". This option works only if the under‐
2832 lying libcurl is built with TLS-SRP support, which requires
2833 OpenSSL or GnuTLS with TLS-SRP support.
2834
2835 Added in 7.21.4.
2836
2837 --tlspassword
2838 Set password for use with the TLS authentication method speci‐
2839 fied with --tlsauthtype. Requires that --tlsuser also be set.
2840
2841 Added in 7.21.4.
2842
2843 --tlsuser <name>
2844 Set username for use with the TLS authentication method speci‐
2845 fied with --tlsauthtype. Requires that --tlspassword also is
2846 set.
2847
2848 Added in 7.21.4.
2849
2850 --tlsv1.0
2851 (TLS) Forces curl to use TLS version 1.0 or later when connect‐
2852 ing to a remote TLS server.
2853
2854 Added in 7.34.0.
2855
2856 --tlsv1.1
2857 (TLS) Forces curl to use TLS version 1.1 or later when connect‐
2858 ing to a remote TLS server.
2859
2860 Added in 7.34.0.
2861
2862 --tlsv1.2
2863 (TLS) Forces curl to use TLS version 1.2 or later when connect‐
2864 ing to a remote TLS server.
2865
2866 Added in 7.34.0.
2867
2868 --tlsv1.3
2869 (TLS) Forces curl to use TLS version 1.3 or later when connect‐
2870 ing to a remote TLS server.
2871
2872 Note that TLS 1.3 is only supported by a subset of TLS backends.
2873 At the time of this writing, they are BoringSSL, NSS, and Secure
2874 Transport (on iOS 11 or later, and macOS 10.13 or later).
2875
2876 Added in 7.52.0.
2877
2878 -1, --tlsv1
2879 (SSL) Tells curl to use at least TLS version 1.x when negotiat‐
2880 ing with a remote TLS server. That means TLS version 1.0 or
2881 higher
2882
2883 See also --http1.1 and --http2. -1, --tlsv1 requires that the
2884 underlying libcurl was built to support TLS. This option over‐
2885 rides --tlsv1.1 and --tlsv1.2 and --tlsv1.3.
2886
2887 --tr-encoding
2888 (HTTP) Request a compressed Transfer-Encoding response using one
2889 of the algorithms curl supports, and uncompress the data while
2890 receiving it.
2891
2892 Added in 7.21.6.
2893
2894 --trace-ascii <file>
2895 Enables a full trace dump of all incoming and outgoing data,
2896 including descriptive information, to the given output file. Use
2897 "-" as filename to have the output sent to stdout.
2898
2899 This is very similar to --trace, but leaves out the hex part and
2900 only shows the ASCII part of the dump. It makes smaller output
2901 that might be easier to read for untrained humans.
2902
2903 If this option is used several times, the last one will be used.
2904
2905 This option overrides --trace and -v, --verbose.
2906
2907 --trace-time
2908 Prepends a time stamp to each trace or verbose line that curl
2909 displays.
2910
2911 Added in 7.14.0.
2912
2913 --trace <file>
2914 Enables a full trace dump of all incoming and outgoing data,
2915 including descriptive information, to the given output file. Use
2916 "-" as filename to have the output sent to stdout. Use "%" as
2917 filename to have the output sent to stderr.
2918
2919 If this option is used several times, the last one will be used.
2920
2921 This option overrides -v, --verbose and --trace-ascii.
2922
2923 --unix-socket <path>
2924 (HTTP) Connect through this Unix domain socket, instead of using
2925 the network.
2926
2927 Added in 7.40.0.
2928
2929 -T, --upload-file <file>
2930 This transfers the specified local file to the remote URL. If
2931 there is no file part in the specified URL, curl will append the
2932 local file name. NOTE that you must use a trailing / on the last
2933 directory to really prove to Curl that there is no file name or
2934 curl will think that your last directory name is the remote file
2935 name to use. That will most likely cause the upload operation to
2936 fail. If this is used on an HTTP(S) server, the PUT command will
2937 be used.
2938
2939 Use the file name "-" (a single dash) to use stdin instead of a
2940 given file. Alternately, the file name "." (a single period)
2941 may be specified instead of "-" to use stdin in non-blocking
2942 mode to allow reading server output while stdin is being
2943 uploaded.
2944
2945 You can specify one -T, --upload-file for each URL on the com‐
2946 mand line. Each -T, --upload-file + URL pair specifies what to
2947 upload and to where. curl also supports "globbing" of the -T,
2948 --upload-file argument, meaning that you can upload multiple
2949 files to a single URL by using the same URL globbing style sup‐
2950 ported in the URL, like this:
2951
2952 curl --upload-file "{file1,file2}" http://www.example.com
2953
2954 or even
2955
2956 curl -T "img[1-1000].png" ftp://ftp.example.com/upload/
2957
2958 When uploading to an SMTP server: the uploaded data is assumed
2959 to be RFC 5322 formatted. It has to feature the necessary set of
2960 headers and mail body formatted correctly by the user as curl
2961 will not transcode nor encode it further in any way.
2962
2963 --url <url>
2964 Specify a URL to fetch. This option is mostly handy when you
2965 want to specify URL(s) in a config file.
2966
2967 If the given URL is missing a scheme name (such as "http://" or
2968 "ftp://" etc) then curl will make a guess based on the host. If
2969 the outermost sub-domain name matches DICT, FTP, IMAP, LDAP,
2970 POP3 or SMTP then that protocol will be used, otherwise HTTP
2971 will be used. Since 7.45.0 guessing can be disabled by setting a
2972 default protocol, see --proto-default for details.
2973
2974 This option may be used any number of times. To control where
2975 this URL is written, use the -o, --output or the -O, --remote-
2976 name options.
2977
2978 -B, --use-ascii
2979 (FTP LDAP) Enable ASCII transfer. For FTP, this can also be
2980 enforced by using a URL that ends with ";type=A". This option
2981 causes data sent to stdout to be in text mode for win32 systems.
2982
2983 -A, --user-agent <name>
2984 (HTTP) Specify the User-Agent string to send to the HTTP server.
2985 To encode blanks in the string, surround the string with single
2986 quote marks. This header can also be set with the -H, --header
2987 or the --proxy-header options.
2988
2989 If this option is used several times, the last one will be used.
2990
2991 -u, --user <user:password>
2992 Specify the user name and password to use for server authentica‐
2993 tion. Overrides -n, --netrc and --netrc-optional.
2994
2995 If you simply specify the user name, curl will prompt for a
2996 password.
2997
2998 The user name and passwords are split up on the first colon,
2999 which makes it impossible to use a colon in the user name with
3000 this option. The password can, still.
3001
3002 When using Kerberos V5 with a Windows based server you should
3003 include the Windows domain name in the user name, in order for
3004 the server to successfully obtain a Kerberos Ticket. If you
3005 don't then the initial authentication handshake may fail.
3006
3007 When using NTLM, the user name can be specified simply as the
3008 user name, without the domain, if there is a single domain and
3009 forest in your setup for example.
3010
3011 To specify the domain name use either Down-Level Logon Name or
3012 UPN (User Principal Name) formats. For example, EXAMPLE\user and
3013 user@example.com respectively.
3014
3015 If you use a Windows SSPI-enabled curl binary and perform Ker‐
3016 beros V5, Negotiate, NTLM or Digest authentication then you can
3017 tell curl to select the user name and password from your envi‐
3018 ronment by specifying a single colon with this option: "-u :".
3019
3020 If this option is used several times, the last one will be used.
3021
3022 -v, --verbose
3023 Makes curl verbose during the operation. Useful for debugging
3024 and seeing what's going on "under the hood". A line starting
3025 with '>' means "header data" sent by curl, '<' means "header
3026 data" received by curl that is hidden in normal cases, and a
3027 line starting with '*' means additional info provided by curl.
3028
3029 If you only want HTTP headers in the output, -i, --include might
3030 be the option you're looking for.
3031
3032 If you think this option still doesn't give you enough details,
3033 consider using --trace or --trace-ascii instead.
3034
3035 Use -s, --silent to make curl really quiet.
3036
3037 See also -i, --include. This option overrides --trace and
3038 --trace-ascii.
3039
3040 -V, --version
3041 Displays information about curl and the libcurl version it uses.
3042
3043 The first line includes the full version of curl, libcurl and
3044 other 3rd party libraries linked with the executable.
3045
3046 The second line (starts with "Protocols:") shows all protocols
3047 that libcurl reports to support.
3048
3049 The third line (starts with "Features:") shows specific features
3050 libcurl reports to offer. Available features include:
3051
3052 IPv6 You can use IPv6 with this.
3053
3054 krb4 Krb4 for FTP is supported.
3055
3056 SSL SSL versions of various protocols are supported, such as
3057 HTTPS, FTPS, POP3S and so on.
3058
3059 libz Automatic decompression of compressed files over HTTP is
3060 supported.
3061
3062 NTLM NTLM authentication is supported.
3063
3064 Debug This curl uses a libcurl built with Debug. This enables
3065 more error-tracking and memory debugging etc. For curl-
3066 developers only!
3067
3068 AsynchDNS
3069 This curl uses asynchronous name resolves. Asynchronous
3070 name resolves can be done using either the c-ares or the
3071 threaded resolver backends.
3072
3073 SPNEGO SPNEGO authentication is supported.
3074
3075 Largefile
3076 This curl supports transfers of large files, files larger
3077 than 2GB.
3078
3079 IDN This curl supports IDN - international domain names.
3080
3081 GSS-API
3082 GSS-API is supported.
3083
3084 SSPI SSPI is supported.
3085
3086 TLS-SRP
3087 SRP (Secure Remote Password) authentication is supported
3088 for TLS.
3089
3090 HTTP2 HTTP/2 support has been built-in.
3091
3092 UnixSockets
3093 Unix sockets support is provided.
3094
3095 HTTPS-proxy
3096 This curl is built to support HTTPS proxy.
3097
3098 Metalink
3099 This curl supports Metalink (both version 3 and 4 (RFC
3100 5854)), which describes mirrors and hashes. curl will
3101 use mirrors for failover if there are errors (such as the
3102 file or server not being available).
3103
3104 PSL PSL is short for Public Suffix List and means that this
3105 curl has been built with knowledge about "public suf‐
3106 fixes".
3107
3108 MultiSSL
3109 This curl supports multiple TLS backends.
3110
3111 -w, --write-out <format>
3112 Make curl display information on stdout after a completed trans‐
3113 fer. The format is a string that may contain plain text mixed
3114 with any number of variables. The format can be specified as a
3115 literal "string", or you can have curl read the format from a
3116 file with "@filename" and to tell curl to read the format from
3117 stdin you write "@-".
3118
3119 The variables present in the output format will be substituted
3120 by the value or text that curl thinks fit, as described below.
3121 All variables are specified as %{variable_name} and to output a
3122 normal % you just write them as %%. You can output a newline by
3123 using \n, a carriage return with \r and a tab space with \t.
3124
3125 The output will be written to standard output, but this can be
3126 switched to standard error by using %{stderr}.
3127
3128 NOTE: The %-symbol is a special symbol in the win32-environment,
3129 where all occurrences of % must be doubled when using this
3130 option.
3131
3132 The variables available are:
3133
3134 content_type The Content-Type of the requested document, if
3135 there was any.
3136
3137 filename_effective
3138 The ultimate filename that curl writes out to.
3139 This is only meaningful if curl is told to write
3140 to a file with the -O, --remote-name or -o,
3141 --output option. It's most useful in combination
3142 with the -J, --remote-header-name option. (Added
3143 in 7.26.0)
3144
3145 ftp_entry_path The initial path curl ended up in when logging on
3146 to the remote FTP server. (Added in 7.15.4)
3147
3148 http_code The numerical response code that was found in the
3149 last retrieved HTTP(S) or FTP(s) transfer. In
3150 7.18.2 the alias response_code was added to show
3151 the same info.
3152
3153 http_connect The numerical code that was found in the last
3154 response (from a proxy) to a curl CONNECT
3155 request. (Added in 7.12.4)
3156
3157 http_version The http version that was effectively used.
3158 (Added in 7.50.0)
3159
3160 local_ip The IP address of the local end of the most
3161 recently done connection - can be either IPv4 or
3162 IPv6 (Added in 7.29.0)
3163
3164 local_port The local port number of the most recently done
3165 connection (Added in 7.29.0)
3166
3167 num_connects Number of new connects made in the recent trans‐
3168 fer. (Added in 7.12.3)
3169
3170 num_redirects Number of redirects that were followed in the
3171 request. (Added in 7.12.3)
3172
3173 proxy_ssl_verify_result
3174 The result of the HTTPS proxy's SSL peer certifi‐
3175 cate verification that was requested. 0 means the
3176 verification was successful. (Added in 7.52.0)
3177
3178 redirect_url When an HTTP request was made without -L, --loca‐
3179 tion to follow redirects (or when --max-redir is
3180 met), this variable will show the actual URL a
3181 redirect would have gone to. (Added in 7.18.2)
3182
3183 remote_ip The remote IP address of the most recently done
3184 connection - can be either IPv4 or IPv6 (Added in
3185 7.29.0)
3186
3187 remote_port The remote port number of the most recently done
3188 connection (Added in 7.29.0)
3189
3190 scheme The URL scheme (sometimes called protocol) that
3191 was effectively used (Added in 7.52.0)
3192
3193 size_download The total amount of bytes that were downloaded.
3194
3195 size_header The total amount of bytes of the downloaded head‐
3196 ers.
3197
3198 size_request The total amount of bytes that were sent in the
3199 HTTP request.
3200
3201 size_upload The total amount of bytes that were uploaded.
3202
3203 speed_download The average download speed that curl measured for
3204 the complete download. Bytes per second.
3205
3206 speed_upload The average upload speed that curl measured for
3207 the complete upload. Bytes per second.
3208
3209 ssl_verify_result
3210 The result of the SSL peer certificate verifica‐
3211 tion that was requested. 0 means the verification
3212 was successful. (Added in 7.19.0)
3213
3214 stderr From this point on, the -w, --write-out output
3215 will be written to standard error. (Added in
3216 7.63.0)
3217
3218 stdout From this point on, the -w, --write-out output
3219 will be written to standard output. This is the
3220 default, but can be used to switch back after
3221 switching to stderr. (Added in 7.63.0)
3222
3223 time_appconnect
3224 The time, in seconds, it took from the start
3225 until the SSL/SSH/etc connect/handshake to the
3226 remote host was completed. (Added in 7.19.0)
3227
3228 time_connect The time, in seconds, it took from the start
3229 until the TCP connect to the remote host (or
3230 proxy) was completed.
3231
3232 time_namelookup
3233 The time, in seconds, it took from the start
3234 until the name resolving was completed.
3235
3236 time_pretransfer
3237 The time, in seconds, it took from the start
3238 until the file transfer was just about to begin.
3239 This includes all pre-transfer commands and nego‐
3240 tiations that are specific to the particular pro‐
3241 tocol(s) involved.
3242
3243 time_redirect The time, in seconds, it took for all redirection
3244 steps including name lookup, connect, pretransfer
3245 and transfer before the final transaction was
3246 started. time_redirect shows the complete execu‐
3247 tion time for multiple redirections. (Added in
3248 7.12.3)
3249
3250 time_starttransfer
3251 The time, in seconds, it took from the start
3252 until the first byte was just about to be trans‐
3253 ferred. This includes time_pretransfer and also
3254 the time the server needed to calculate the
3255 result.
3256
3257 time_total The total time, in seconds, that the full opera‐
3258 tion lasted.
3259
3260 url_effective The URL that was fetched last. This is most mean‐
3261 ingful if you've told curl to follow location:
3262 headers.
3263
3264 If this option is used several times, the last one will be used.
3265
3266 --xattr
3267 When saving output to a file, this option tells curl to store
3268 certain file metadata in extended file attributes. Currently,
3269 the URL is stored in the xdg.origin.url attribute and, for HTTP,
3270 the content type is stored in the mime_type attribute. If the
3271 file system does not support extended attributes, a warning is
3272 issued.
3273
3275 ~/.curlrc
3276 Default config file, see -K, --config for details.
3277
3279 The environment variables can be specified in lower case or upper case.
3280 The lower case version has precedence. http_proxy is an exception as it
3281 is only available in lower case.
3282
3283 Using an environment variable to set the proxy has the same effect as
3284 using the -x, --proxy option.
3285
3286
3287 http_proxy [protocol://]<host>[:port]
3288 Sets the proxy server to use for HTTP.
3289
3290 HTTPS_PROXY [protocol://]<host>[:port]
3291 Sets the proxy server to use for HTTPS.
3292
3293 [url-protocol]_PROXY [protocol://]<host>[:port]
3294 Sets the proxy server to use for [url-protocol], where the pro‐
3295 tocol is a protocol that curl supports and as specified in a
3296 URL. FTP, FTPS, POP3, IMAP, SMTP, LDAP etc.
3297
3298 ALL_PROXY [protocol://]<host>[:port]
3299 Sets the proxy server to use if no protocol-specific proxy is
3300 set.
3301
3302 NO_PROXY <comma-separated list of hosts/domains>
3303 list of host names that shouldn't go through any proxy. If set
3304 to an asterisk '*' only, it matches all hosts. Each name in this
3305 list is matched as either a domain name which contains the host‐
3306 name, or the hostname itself.
3307
3308 This environment variable disables use of the proxy even when
3309 specified with the -x, --proxy option. That is
3310 NO_PROXY=direct.example.com curl -x http://proxy.example.com
3311 http://direct.example.com accesses the target URL directly, and
3312 NO_PROXY=direct.example.com curl -x http://proxy.example.com
3313 http://somewhere.example.com accesses the target URL through the
3314 proxy.
3315
3316 The list of host names can also be include numerical IP
3317 addresses, and IPv6 versions should then be given without
3318 enclosing brackets.
3319
3320
3322 Since curl version 7.21.7, the proxy string may be specified with a
3323 protocol:// prefix to specify alternative proxy protocols.
3324
3325 If no protocol is specified in the proxy string or if the string
3326 doesn't match a supported one, the proxy will be treated as an HTTP
3327 proxy.
3328
3329 The supported proxy protocol prefixes are as follows:
3330
3331 http://
3332 Makes it use it as an HTTP proxy. The default if no scheme pre‐
3333 fix is used.
3334
3335 https://
3336 Makes it treated as an HTTPS proxy.
3337
3338 socks4://
3339 Makes it the equivalent of --socks4
3340
3341 socks4a://
3342 Makes it the equivalent of --socks4a
3343
3344 socks5://
3345 Makes it the equivalent of --socks5
3346
3347 socks5h://
3348 Makes it the equivalent of --socks5-hostname
3349
3351 There are a bunch of different error codes and their corresponding
3352 error messages that may appear during bad conditions. At the time of
3353 this writing, the exit codes are:
3354
3355 1 Unsupported protocol. This build of curl has no support for this
3356 protocol.
3357
3358 2 Failed to initialize.
3359
3360 3 URL malformed. The syntax was not correct.
3361
3362 4 A feature or option that was needed to perform the desired
3363 request was not enabled or was explicitly disabled at build-
3364 time. To make curl able to do this, you probably need another
3365 build of libcurl!
3366
3367 5 Couldn't resolve proxy. The given proxy host could not be
3368 resolved.
3369
3370 6 Couldn't resolve host. The given remote host was not resolved.
3371
3372 7 Failed to connect to host.
3373
3374 8 Weird server reply. The server sent data curl couldn't parse.
3375
3376 9 FTP access denied. The server denied login or denied access to
3377 the particular resource or directory you wanted to reach. Most
3378 often you tried to change to a directory that doesn't exist on
3379 the server.
3380
3381 10 FTP accept failed. While waiting for the server to connect back
3382 when an active FTP session is used, an error code was sent over
3383 the control connection or similar.
3384
3385 11 FTP weird PASS reply. Curl couldn't parse the reply sent to the
3386 PASS request.
3387
3388 12 During an active FTP session while waiting for the server to
3389 connect back to curl, the timeout expired.
3390
3391 13 FTP weird PASV reply, Curl couldn't parse the reply sent to the
3392 PASV request.
3393
3394 14 FTP weird 227 format. Curl couldn't parse the 227-line the
3395 server sent.
3396
3397 15 FTP can't get host. Couldn't resolve the host IP we got in the
3398 227-line.
3399
3400 16 HTTP/2 error. A problem was detected in the HTTP2 framing layer.
3401 This is somewhat generic and can be one out of several problems,
3402 see the error message for details.
3403
3404 17 FTP couldn't set binary. Couldn't change transfer method to
3405 binary.
3406
3407 18 Partial file. Only a part of the file was transferred.
3408
3409 19 FTP couldn't download/access the given file, the RETR (or simi‐
3410 lar) command failed.
3411
3412 21 FTP quote error. A quote command returned error from the server.
3413
3414 22 HTTP page not retrieved. The requested url was not found or
3415 returned another error with the HTTP error code being 400 or
3416 above. This return code only appears if -f, --fail is used.
3417
3418 23 Write error. Curl couldn't write data to a local filesystem or
3419 similar.
3420
3421 25 FTP couldn't STOR file. The server denied the STOR operation,
3422 used for FTP uploading.
3423
3424 26 Read error. Various reading problems.
3425
3426 27 Out of memory. A memory allocation request failed.
3427
3428 28 Operation timeout. The specified time-out period was reached
3429 according to the conditions.
3430
3431 30 FTP PORT failed. The PORT command failed. Not all FTP servers
3432 support the PORT command, try doing a transfer using PASV
3433 instead!
3434
3435 31 FTP couldn't use REST. The REST command failed. This command is
3436 used for resumed FTP transfers.
3437
3438 33 HTTP range error. The range "command" didn't work.
3439
3440 34 HTTP post error. Internal post-request generation error.
3441
3442 35 SSL connect error. The SSL handshaking failed.
3443
3444 36 Bad download resume. Couldn't continue an earlier aborted down‐
3445 load.
3446
3447 37 FILE couldn't read file. Failed to open the file. Permissions?
3448
3449 38 LDAP cannot bind. LDAP bind operation failed.
3450
3451 39 LDAP search failed.
3452
3453 41 Function not found. A required LDAP function was not found.
3454
3455 42 Aborted by callback. An application told curl to abort the oper‐
3456 ation.
3457
3458 43 Internal error. A function was called with a bad parameter.
3459
3460 45 Interface error. A specified outgoing interface could not be
3461 used.
3462
3463 47 Too many redirects. When following redirects, curl hit the maxi‐
3464 mum amount.
3465
3466 48 Unknown option specified to libcurl. This indicates that you
3467 passed a weird option to curl that was passed on to libcurl and
3468 rejected. Read up in the manual!
3469
3470 49 Malformed telnet option.
3471
3472 51 The peer's SSL certificate or SSH MD5 fingerprint was not OK.
3473
3474 52 The server didn't reply anything, which here is considered an
3475 error.
3476
3477 53 SSL crypto engine not found.
3478
3479 54 Cannot set SSL crypto engine as default.
3480
3481 55 Failed sending network data.
3482
3483 56 Failure in receiving network data.
3484
3485 58 Problem with the local certificate.
3486
3487 59 Couldn't use specified SSL cipher.
3488
3489 60 Peer certificate cannot be authenticated with known CA certifi‐
3490 cates.
3491
3492 61 Unrecognized transfer encoding.
3493
3494 62 Invalid LDAP URL.
3495
3496 63 Maximum file size exceeded.
3497
3498 64 Requested FTP SSL level failed.
3499
3500 65 Sending the data requires a rewind that failed.
3501
3502 66 Failed to initialise SSL Engine.
3503
3504 67 The user name, password, or similar was not accepted and curl
3505 failed to log in.
3506
3507 68 File not found on TFTP server.
3508
3509 69 Permission problem on TFTP server.
3510
3511 70 Out of disk space on TFTP server.
3512
3513 71 Illegal TFTP operation.
3514
3515 72 Unknown TFTP transfer ID.
3516
3517 73 File already exists (TFTP).
3518
3519 74 No such user (TFTP).
3520
3521 75 Character conversion failed.
3522
3523 76 Character conversion functions required.
3524
3525 77 Problem with reading the SSL CA cert (path? access rights?).
3526
3527 78 The resource referenced in the URL does not exist.
3528
3529 79 An unspecified error occurred during the SSH session.
3530
3531 80 Failed to shut down the SSL connection.
3532
3533 82 Could not load CRL file, missing or wrong format (added in
3534 7.19.0).
3535
3536 83 Issuer check failed (added in 7.19.0).
3537
3538 84 The FTP PRET command failed
3539
3540 85 RTSP: mismatch of CSeq numbers
3541
3542 86 RTSP: mismatch of Session Identifiers
3543
3544 87 unable to parse FTP file list
3545
3546 88 FTP chunk callback reported error
3547
3548 89 No connection available, the session will be queued
3549
3550 90 SSL public key does not matched pinned public key
3551
3552 91 Invalid SSL certificate status.
3553
3554 92 Stream error in HTTP/2 framing layer.
3555
3556 XX More error codes will appear here in future releases. The exist‐
3557 ing ones are meant to never change.
3558
3560 Daniel Stenberg is the main author, but the whole list of contributors
3561 is found in the separate THANKS file.
3562
3564 https://curl.haxx.se
3565
3567 ftp(1), wget(1)
3568
3569
3570
3571Curl 7.64.0 November 16, 2016 curl(1)