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