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 for transferring data from or to a server. It supports
13 these protocols: DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS,
14 IMAP, IMAPS, LDAP, LDAPS, MQTT, POP3, POP3S, RTMP, RTMPS, RTSP, SCP,
15 SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, TFTP, WS and WSS. The command is
16 designed to 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 and more. As you will see below, the number of features will
21 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 find a detailed description
28 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 unless you use
50 -Z, --parallel. You can specify command line options and URLs mixed and
51 in any order on the command 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 a URL without a protocol:// scheme, curl guesses what
71 protocol you want. It then defaults to HTTP but assumes others based on
72 often-used host name prefixes. For example, for host names starting
73 with "ftp." curl assumes you want FTP.
74
75 curl attempts to re-use connections when doing multiple file transfers,
76 so that getting many files from the same server do not use multiple
77 connects / handshakes. This improves speed. Connection re-use can only
78 be done for URLs specified for a single command line invocation and
79 cannot be performed between separate curl runs.
80
82 If not told otherwise, curl writes the received data to stdout. It can
83 be instructed to instead save that data into a local file, using the
84 -o, --output or -O, --remote-name options. If curl is given multiple
85 URLs to transfer on the command line, it similarly needs multiple op‐
86 tions for where to save them.
87
88 curl does not parse or otherwise "understand" the content it gets or
89 writes as output. It does no encoding or decoding, unless explicitly
90 asked to with dedicated command line options.
91
93 curl supports numerous protocols, or put in URL terms: schemes. Your
94 particular build may not support them all.
95
96 DICT Lets you lookup words using online dictionaries.
97
98 FILE Read or write local files. curl does not support accessing
99 file:// URL remotely, but when running on Microsoft Windows us‐
100 ing the native UNC approach will work.
101
102 FTP(S) curl supports the File Transfer Protocol with a lot of tweaks
103 and levers. With or without using TLS.
104
105 GOPHER(S)
106 Retrieve files.
107
108 HTTP(S)
109 curl supports HTTP with numerous options and variations. It can
110 speak HTTP version 0.9, 1.0, 1.1, 2 and 3 depending on build op‐
111 tions and the correct command line options.
112
113 IMAP(S)
114 Using the mail reading protocol, curl can "download" emails for
115 you. With or without using TLS.
116
117 LDAP(S)
118 curl can do directory lookups for you, with or without TLS.
119
120 MQTT curl supports MQTT version 3. Downloading over MQTT equals "sub‐
121 scribe" to a topic while uploading/posting equals "publish" on a
122 topic. MQTT over TLS is not supported (yet).
123
124 POP3(S)
125 Downloading from a pop3 server means getting a mail. With or
126 without using TLS.
127
128 RTMP(S)
129 The Realtime Messaging Protocol is primarily used to server
130 streaming media and curl can download it.
131
132 RTSP curl supports RTSP 1.0 downloads.
133
134 SCP curl supports SSH version 2 scp transfers.
135
136 SFTP curl supports SFTP (draft 5) done over SSH version 2.
137
138 SMB(S) curl supports SMB version 1 for upload and download.
139
140 SMTP(S)
141 Uploading contents to an SMTP server means sending an email.
142 With or without TLS.
143
144 TELNET Telling curl to fetch a telnet URL starts an interactive session
145 where it sends what it reads on stdin and outputs what the
146 server sends it.
147
148 TFTP curl can do TFTP downloads and uploads.
149
151 curl normally displays a progress meter during operations, indicating
152 the amount of transferred data, transfer speeds and estimated time
153 left, etc. The progress meter displays the transfer rate in bytes per
154 second. The suffixes (k, M, G, T, P) are 1024 based. For example 1k is
155 1024 bytes. 1M is 1048576 bytes.
156
157 curl displays this data to the terminal by default, so if you invoke
158 curl to do an operation and it is about to write data to the terminal,
159 it disables the progress meter as otherwise it would mess up the output
160 mixing progress meter and response data.
161
162 If you want a progress meter for HTTP POST or PUT requests, you need to
163 redirect the response output to a file, using shell redirect (>), -o,
164 --output or similar.
165
166 This does not apply to FTP upload as that operation does not spit out
167 any response data to the terminal.
168
169 If you prefer a progress "bar" instead of the regular meter, -#,
170 --progress-bar is your friend. You can also disable the progress meter
171 completely with the -s, --silent option.
172
174 This man page describes curl 8.2.1. If you use a later version, chances
175 are this man page does not fully document it. If you use an earlier
176 version, this document tries to include version information about which
177 specific version that introduced changes.
178
179 You can always learn which the latest curl version is by running
180 curl https://curl.se/info
181
183 Options start with one or two dashes. Many of the options require an
184 additional value next to them.
185
186 The short "single-dash" form of the options, -d for example, may be
187 used with or without a space between it and its value, although a space
188 is a recommended separator. The long "double-dash" form, -d, --data for
189 example, requires a space between it and its value.
190
191 Short version options that do not need any additional values can be
192 used immediately next to each other, like for example you can specify
193 all the options -O, -L and -v at once as -OLv.
194
195 In general, all boolean options are enabled with --option and yet again
196 disabled with --no-option. That is, you use the same option name but
197 prefix it with "no-". However, in this list we mostly only list and
198 show the --option version of them.
199
200 When -:, --next is used, it resets the parser state and you start again
201 with a clean option state, except for the options that are "global".
202 Global options will retain their values and meaning even after -:,
203 --next.
204
205 The following options are global: --fail-early, --libcurl, --parallel-
206 immediate, -Z, --parallel, -#, --progress-bar, --rate, -S, --show-er‐
207 ror, --stderr, --styled-output, --trace-ascii, --trace-ids, --trace-
208 time, --trace and -v, --verbose.
209
210 --abstract-unix-socket <path>
211 (HTTP) Connect through an abstract Unix domain socket, instead
212 of using the network. Note: netstat shows the path of an ab‐
213 stract socket prefixed with '@', however the <path> argument
214 should not have this leading character.
215
216 If --abstract-unix-socket is provided several times, the last
217 set value will be used.
218
219 Example:
220 curl --abstract-unix-socket socketpath https://example.com
221
222 See also --unix-socket. Added in 7.53.0.
223
224 --alt-svc <file name>
225 (HTTPS) This option enables the alt-svc parser in curl. If the
226 file name points to an existing alt-svc cache file, that will be
227 used. After a completed transfer, the cache will be saved to the
228 file name again if it has been modified.
229
230 Specify a "" file name (zero length) to avoid loading/saving and
231 make curl just handle the cache in memory.
232
233 If this option is used several times, curl will load contents
234 from all the files but the last one will be used for saving.
235
236 --alt-svc can be used several times in a command line
237
238 Example:
239 curl --alt-svc svc.txt https://example.com
240
241 See also --resolve and --connect-to. Added in 7.64.1.
242
243 --anyauth
244 (HTTP) Tells curl to figure out authentication method by itself,
245 and use the most secure one the remote site claims to support.
246 This is done by first doing a request and checking the response-
247 headers, thus possibly inducing an extra network round-trip.
248 This is used instead of setting a specific authentication
249 method, which you can do with --basic, --digest, --ntlm, and
250 --negotiate.
251
252 Using --anyauth is not recommended if you do uploads from stdin,
253 since it may require data to be sent twice and then the client
254 must be able to rewind. If the need should arise when uploading
255 from stdin, the upload operation will fail.
256
257 Used together with -u, --user.
258
259 Providing --anyauth multiple times has no extra effect.
260
261 Example:
262 curl --anyauth --user me:pwd https://example.com
263
264 See also --proxy-anyauth, --basic and --digest.
265
266 -a, --append
267 (FTP SFTP) When used in an upload, this makes curl append to the
268 target file instead of overwriting it. If the remote file does
269 not exist, it will be created. Note that this flag is ignored by
270 some SFTP servers (including OpenSSH).
271
272 Providing -a, --append multiple times has no extra effect. Dis‐
273 able it again with --no-append.
274
275 Example:
276 curl --upload-file local --append ftp://example.com/
277
278 See also -r, --range and -C, --continue-at.
279
280 --aws-sigv4 <provider1[:provider2[:region[:service]]]>
281 Use AWS V4 signature authentication in the transfer.
282
283 The provider argument is a string that is used by the algorithm
284 when creating outgoing authentication headers.
285
286 The region argument is a string that points to a geographic area
287 of a resources collection (region-code) when the region name is
288 omitted from the endpoint.
289
290 The service argument is a string that points to a function pro‐
291 vided by a cloud (service-code) when the service name is omitted
292 from the endpoint.
293
294 If --aws-sigv4 is provided several times, the last set value
295 will be used.
296
297 Example:
298 curl --aws-sigv4 "aws:amz:us-east-2:es" --user "key:secret" https://example.com
299
300 See also --basic and -u, --user. Added in 7.75.0.
301
302 --basic
303 (HTTP) Tells curl to use HTTP Basic authentication with the re‐
304 mote host. This is the default and this option is usually point‐
305 less, unless you use it to override a previously set option that
306 sets a different authentication method (such as --ntlm, --di‐
307 gest, or --negotiate).
308
309 Used together with -u, --user.
310
311 Providing --basic multiple times has no extra effect.
312
313 Example:
314 curl -u name:password --basic https://example.com
315
316 See also --proxy-basic.
317
318 --ca-native
319 (TLS) Tells curl to use the CA store from the native operating
320 system to verify the peer. By default, curl will otherwise use a
321 CA store provided in a single file or directory, but when using
322 this option it will interface the operating system's own vault.
323
324 This option only works for curl on Windows when built to use
325 OpenSSL. When curl on Windows is built to use Schannel, this
326 feature is implied and curl then only uses the native CA store.
327
328 Providing --ca-native multiple times has no extra effect. Dis‐
329 able it again with --no-ca-native.
330
331 Example:
332 curl --ca-native https://example.com
333
334 See also --cacert, --capath and -k, --insecure. Added in 8.2.0.
335
336 --cacert <file>
337 (TLS) Tells curl to use the specified certificate file to verify
338 the peer. The file may contain multiple CA certificates. The
339 certificate(s) must be in PEM format. Normally curl is built to
340 use a default file for this, so this option is typically used to
341 alter that default file.
342
343 curl recognizes the environment variable named 'CURL_CA_BUNDLE'
344 if it is set, and uses the given path as a path to a CA cert
345 bundle. This option overrides that variable.
346
347 The windows version of curl will automatically look for a CA
348 certs file named 'curl-ca-bundle.crt', either in the same direc‐
349 tory as curl.exe, or in the Current Working Directory, or in any
350 folder along your PATH.
351
352 If curl is built against the NSS SSL library, the NSS PEM
353 PKCS#11 module (libnsspem.so) needs to be available for this op‐
354 tion to work properly.
355
356 (iOS and macOS only) If curl is built against Secure Transport,
357 then this option is supported for backward compatibility with
358 other SSL engines, but it should not be set. If the option is
359 not set, then curl will use the certificates in the system and
360 user Keychain to verify the peer, which is the preferred method
361 of verifying the peer's certificate chain.
362
363 (Schannel only) This option is supported for Schannel in Windows
364 7 or later with libcurl 7.60 or later. This option is supported
365 for backward compatibility with other SSL engines; instead it is
366 recommended to use Windows' store of root certificates (the de‐
367 fault for Schannel).
368
369 If --cacert is provided several times, the last set value will
370 be used.
371
372 Example:
373 curl --cacert CA-file.txt https://example.com
374
375 See also --capath and -k, --insecure.
376
377 --capath <dir>
378 (TLS) Tells curl to use the specified certificate directory to
379 verify the peer. Multiple paths can be provided by separating
380 them with ":" (e.g. "path1:path2:path3"). The certificates must
381 be in PEM format, and if curl is built against OpenSSL, the di‐
382 rectory must have been processed using the c_rehash utility sup‐
383 plied with OpenSSL. Using --capath can allow OpenSSL-powered
384 curl to make SSL-connections much more efficiently than using
385 --cacert if the --cacert file contains many CA certificates.
386
387 If this option is set, the default capath value will be ignored.
388
389 If --capath is provided several times, the last set value will
390 be used.
391
392 Example:
393 curl --capath /local/directory https://example.com
394
395 See also --cacert and -k, --insecure.
396
397 --cert-status
398 (TLS) Tells curl to verify the status of the server certificate
399 by using the Certificate Status Request (aka. OCSP stapling) TLS
400 extension.
401
402 If this option is enabled and the server sends an invalid (e.g.
403 expired) response, if the response suggests that the server cer‐
404 tificate has been revoked, or no response at all is received,
405 the verification fails.
406
407 This is currently only implemented in the OpenSSL, GnuTLS and
408 NSS backends.
409
410 Providing --cert-status multiple times has no extra effect.
411 Disable it again with --no-cert-status.
412
413 Example:
414 curl --cert-status https://example.com
415
416 See also --pinnedpubkey. Added in 7.41.0.
417
418 --cert-type <type>
419 (TLS) Tells curl what type the provided client certificate is
420 using. PEM, DER, ENG and P12 are recognized types.
421
422 The default type depends on the TLS backend and is usually PEM,
423 however for Secure Transport and Schannel it is P12. If -E,
424 --cert is a pkcs11: URI then ENG is the default type.
425
426 If --cert-type is provided several times, the last set value
427 will be used.
428
429 Example:
430 curl --cert-type PEM --cert file https://example.com
431
432 See also -E, --cert, --key and --key-type.
433
434 -E, --cert <certificate[:password]>
435 (TLS) Tells curl to use the specified client certificate file
436 when getting a file with HTTPS, FTPS or another SSL-based proto‐
437 col. The certificate must be in PKCS#12 format if using Secure
438 Transport, or PEM format if using any other engine. If the op‐
439 tional password is not specified, it will be queried for on the
440 terminal. Note that this option assumes a certificate file that
441 is the private key and the client certificate concatenated. See
442 -E, --cert and --key to specify them independently.
443
444 In the <certificate> portion of the argument, you must escape
445 the character ":" as "\:" so that it is not recognized as the
446 password delimiter. Similarly, you must escape the character "\"
447 as "\\" so that it is not recognized as an escape character.
448
449 If curl is built against the NSS SSL library then this option
450 can tell curl the nickname of the certificate to use within the
451 NSS database defined by the environment variable SSL_DIR (or by
452 default /etc/pki/nssdb). If the NSS PEM PKCS#11 module (lib‐
453 nsspem.so) is available then PEM files may be loaded.
454
455 If you provide a path relative to the current directory, you
456 must prefix the path with "./" in order to avoid confusion with
457 an NSS database nickname.
458
459 If curl is built against OpenSSL library, and the engine pkcs11
460 is available, then a PKCS#11 URI (RFC 7512) can be used to spec‐
461 ify a certificate located in a PKCS#11 device. A string begin‐
462 ning with "pkcs11:" will be interpreted as a PKCS#11 URI. If a
463 PKCS#11 URI is provided, then the --engine option will be set as
464 "pkcs11" if none was provided and the --cert-type option will be
465 set as "ENG" if none was provided.
466
467 (iOS and macOS only) If curl is built against Secure Transport,
468 then the certificate string can either be the name of a certifi‐
469 cate/private key in the system or user keychain, or the path to
470 a PKCS#12-encoded certificate and private key. If you want to
471 use a file from the current directory, please precede it with
472 "./" prefix, in order to avoid confusion with a nickname.
473
474 (Schannel only) Client certificates must be specified by a path
475 expression to a certificate store. (Loading PFX is not sup‐
476 ported; you can import it to a store first). You can use "<store
477 location>\<store name>\<thumbprint>" to refer to a certificate
478 in the system certificates store, for example, "Curren‐
479 tUser\MY\934a7ac6f8a5d579285a74fa61e19f23ddfe8d7a". Thumbprint
480 is usually a SHA-1 hex string which you can see in certificate
481 details. Following store locations are supported: CurrentUser,
482 LocalMachine, CurrentService, Services, CurrentUserGroupPolicy,
483 LocalMachineGroupPolicy, LocalMachineEnterprise.
484
485 If -E, --cert is provided several times, the last set value will
486 be used.
487
488 Example:
489 curl --cert certfile --key keyfile https://example.com
490
491 See also --cert-type, --key and --key-type.
492
493 --ciphers <list of ciphers>
494 (TLS) Specifies which ciphers to use in the connection. The list
495 of ciphers must specify valid ciphers. Read up on SSL cipher
496 list details on this URL:
497
498 https://curl.se/docs/ssl-ciphers.html
499
500 If --ciphers is provided several times, the last set value will
501 be used.
502
503 Example:
504 curl --ciphers ECDHE-ECDSA-AES256-CCM8 https://example.com
505
506 See also --tlsv1.3, --tls13-ciphers and --proxy-ciphers.
507
508 --compressed-ssh
509 (SCP SFTP) Enables built-in SSH compression. This is a request,
510 not an order; the server may or may not do it.
511
512 Providing --compressed-ssh multiple times has no extra effect.
513 Disable it again with --no-compressed-ssh.
514
515 Example:
516 curl --compressed-ssh sftp://example.com/
517
518 See also --compressed. Added in 7.56.0.
519
520 --compressed
521 (HTTP) Request a compressed response using one of the algorithms
522 curl supports, and automatically decompress the content.
523
524 Response headers are not modified when saved, so if they are
525 "interpreted" separately again at a later point they might ap‐
526 pear to be saying that the content is (still) compressed; while
527 in fact it has already been decompressed.
528
529 If this option is used and the server sends an unsupported en‐
530 coding, curl will report an error. This is a request, not an or‐
531 der; the server may or may not deliver data compressed.
532
533 Providing --compressed multiple times has no extra effect. Dis‐
534 able it again with --no-compressed.
535
536 Example:
537 curl --compressed https://example.com
538
539 See also --compressed-ssh.
540
541 -K, --config <file>
542 Specify a text file to read curl arguments from. The command
543 line arguments found in the text file will be used as if they
544 were provided on the command line.
545
546 Options and their parameters must be specified on the same line
547 in the file, separated by whitespace, colon, or the equals sign.
548 Long option names can optionally be given in the config file
549 without the initial double dashes and if so, the colon or equals
550 characters can be used as separators. If the option is specified
551 with one or two dashes, there can be no colon or equals charac‐
552 ter between the option and its parameter.
553
554 If the parameter contains whitespace (or starts with : or =),
555 the parameter must be enclosed within quotes. Within double
556 quotes, the following escape sequences are available: \\, \",
557 \t, \n, \r and \v. A backslash preceding any other letter is ig‐
558 nored.
559
560 If the first column of a config line is a '#' character, the
561 rest of the line will be treated as a comment.
562
563 Only write one option per physical line in the config file. A
564 single line is required to be no more than 10 megabytes (since
565 8.2.0).
566
567 Specify the filename to -K, --config as '-' to make curl read
568 the file from stdin.
569
570 Note that to be able to specify a URL in the config file, you
571 need to specify it using the --url option, and not by simply
572 writing the URL on its own line. So, it could look similar to
573 this:
574
575 url = "https://curl.se/docs/"
576
577 # --- Example file ---
578 # this is a comment
579 url = "example.com"
580 output = "curlhere.html"
581 user-agent = "superagent/1.0"
582
583 # and fetch another URL too
584 url = "example.com/docs/manpage.html"
585 -O
586 referer = "http://nowhereatall.example.com/"
587 # --- End of example file ---
588
589 When curl is invoked, it (unless -q, --disable is used) checks
590 for a default config file and uses it if found, even when -K,
591 --config is used. The default config file is checked for in the
592 following places in this order:
593
594 1) "$CURL_HOME/.curlrc"
595
596 2) "$XDG_CONFIG_HOME/curlrc" (Added in 7.73.0)
597
598 3) "$HOME/.curlrc"
599
600 4) Windows: "%USERPROFILE%\.curlrc"
601
602 5) Windows: "%APPDATA%\.curlrc"
603
604 6) Windows: "%USERPROFILE%\Application Data\.curlrc"
605
606 7) Non-Windows: use getpwuid to find the home directory
607
608 8) On Windows, if it finds no .curlrc file in the sequence de‐
609 scribed above, it checks for one in the same dir the curl exe‐
610 cutable is placed.
611
612 On Windows two filenames are checked per location: .curlrc and
613 _curlrc, preferring the former. Older versions on Windows
614 checked for _curlrc only.
615
616 -K, --config can be used several times in a command line
617
618 Example:
619 curl --config file.txt https://example.com
620
621 See also -q, --disable.
622
623 --connect-timeout <fractional seconds>
624 Maximum time in seconds that you allow curl's connection to
625 take. This only limits the connection phase, so if curl con‐
626 nects within the given period it will continue - if not it will
627 exit. Since version 7.32.0, this option accepts decimal values.
628
629 The "connection phase" is considered complete when the DNS
630 lookup and requested TCP, TLS or QUIC handshakes are done.
631
632 The decimal value needs to provided using a dot (.) as decimal
633 separator - not the local version even if it might be using an‐
634 other separator.
635
636 If --connect-timeout is provided several times, the last set
637 value will be used.
638
639 Examples:
640 curl --connect-timeout 20 https://example.com
641 curl --connect-timeout 3.14 https://example.com
642
643 See also -m, --max-time.
644
645 --connect-to <HOST1:PORT1:HOST2:PORT2>
646
647 For a request to the given HOST1:PORT1 pair, connect to
648 HOST2:PORT2 instead. This option is suitable to direct requests
649 at a specific server, e.g. at a specific cluster node in a clus‐
650 ter of servers. This option is only used to establish the net‐
651 work connection. It does NOT affect the hostname/port that is
652 used for TLS/SSL (e.g. SNI, certificate verification) or for the
653 application protocols. "HOST1" and "PORT1" may be the empty
654 string, meaning "any host/port". "HOST2" and "PORT2" may also be
655 the empty string, meaning "use the request's original
656 host/port".
657
658 A "host" specified to this option is compared as a string, so it
659 needs to match the name used in request URL. It can be either
660 numerical such as "127.0.0.1" or the full host name such as "ex‐
661 ample.org".
662
663 --connect-to can be used several times in a command line
664
665 Example:
666 curl --connect-to example.com:443:example.net:8443 https://example.com
667
668 See also --resolve and -H, --header. Added in 7.49.0.
669
670 -C, --continue-at <offset>
671 Continue/Resume a previous file transfer at the given offset.
672 The given offset is the exact number of bytes that will be
673 skipped, counting from the beginning of the source file before
674 it is transferred to the destination. If used with uploads, the
675 FTP server command SIZE will not be used by curl.
676
677 Use "-C -" to tell curl to automatically find out where/how to
678 resume the transfer. It then uses the given output/input files
679 to figure that out.
680
681 If -C, --continue-at is provided several times, the last set
682 value will be used.
683
684 Examples:
685 curl -C - https://example.com
686 curl -C 400 https://example.com
687
688 See also -r, --range.
689
690 -c, --cookie-jar <filename>
691 (HTTP) Specify to which file you want curl to write all cookies
692 after a completed operation. Curl writes all cookies from its
693 in-memory cookie storage to the given file at the end of opera‐
694 tions. If no cookies are known, no data will be written. The
695 file will be written using the Netscape cookie file format. If
696 you set the file name to a single dash, "-", the cookies will be
697 written to stdout.
698
699 This command line option will activate the cookie engine that
700 makes curl record and use cookies. Another way to activate it is
701 to use the -b, --cookie option.
702
703 If the cookie jar cannot be created or written to, the whole
704 curl operation will not fail or even report an error clearly.
705 Using -v, --verbose will get a warning displayed, but that is
706 the only visible feedback you get about this possibly lethal
707 situation.
708
709 If -c, --cookie-jar is provided several times, the last set
710 value will be used.
711
712 Examples:
713 curl -c store-here.txt https://example.com
714 curl -c store-here.txt -b read-these https://example.com
715
716 See also -b, --cookie.
717
718 -b, --cookie <data|filename>
719 (HTTP) Pass the data to the HTTP server in the Cookie header. It
720 is supposedly the data previously received from the server in a
721 "Set-Cookie:" line. The data should be in the format
722 "NAME1=VALUE1; NAME2=VALUE2". This makes curl use the cookie
723 header with this content explicitly in all outgoing request(s).
724 If multiple requests are done due to authentication, followed
725 redirects or similar, they will all get this cookie passed on.
726
727 If no '=' symbol is used in the argument, it is instead treated
728 as a filename to read previously stored cookie from. This option
729 also activates the cookie engine which will make curl record in‐
730 coming cookies, which may be handy if you are using this in com‐
731 bination with the -L, --location option or do multiple URL
732 transfers on the same invoke. If the file name is exactly a mi‐
733 nus ("-"), curl will instead read the contents from stdin.
734
735 The file format of the file to read cookies from should be plain
736 HTTP headers (Set-Cookie style) or the Netscape/Mozilla cookie
737 file format.
738
739 The file specified with -b, --cookie is only used as input. No
740 cookies will be written to the file. To store cookies, use the
741 -c, --cookie-jar option.
742
743 If you use the Set-Cookie file format and do not specify a do‐
744 main then the cookie is not sent since the domain will never
745 match. To address this, set a domain in Set-Cookie line (doing
746 that will include sub-domains) or preferably: use the Netscape
747 format.
748
749 Users often want to both read cookies from a file and write up‐
750 dated cookies back to a file, so using both -b, --cookie and -c,
751 --cookie-jar in the same command line is common.
752
753 -b, --cookie can be used several times in a command line
754
755 Examples:
756 curl -b cookiefile https://example.com
757 curl -b cookiefile -c cookiefile https://example.com
758
759 See also -c, --cookie-jar and -j, --junk-session-cookies.
760
761 --create-dirs
762 When used in conjunction with the -o, --output option, curl will
763 create the necessary local directory hierarchy as needed. This
764 option creates the directories mentioned with the -o, --output
765 option, nothing else. If the -o, --output file name uses no di‐
766 rectory, or if the directories it mentions already exist, no di‐
767 rectories will be created.
768
769 Created dirs are made with mode 0750 on unix style file systems.
770
771 To create remote directories when using FTP or SFTP, try --ftp-
772 create-dirs.
773
774 Providing --create-dirs multiple times has no extra effect.
775 Disable it again with --no-create-dirs.
776
777 Example:
778 curl --create-dirs --output local/dir/file https://example.com
779
780 See also --ftp-create-dirs and --output-dir.
781
782 --create-file-mode <mode>
783 (SFTP SCP FILE) When curl is used to create files remotely using
784 one of the supported protocols, this option allows the user to
785 set which 'mode' to set on the file at creation time, instead of
786 the default 0644.
787
788 This option takes an octal number as argument.
789
790 If --create-file-mode is provided several times, the last set
791 value will be used.
792
793 Example:
794 curl --create-file-mode 0777 -T localfile sftp://example.com/new
795
796 See also --ftp-create-dirs. Added in 7.75.0.
797
798 --crlf (FTP SMTP) Convert LF to CRLF in upload. Useful for MVS
799 (OS/390).
800
801 (SMTP added in 7.40.0)
802
803 Providing --crlf multiple times has no extra effect. Disable it
804 again with --no-crlf.
805
806 Example:
807 curl --crlf -T file ftp://example.com/
808
809 See also -B, --use-ascii.
810
811 --crlfile <file>
812 (TLS) Provide a file using PEM format with a Certificate Revoca‐
813 tion List that may specify peer certificates that are to be con‐
814 sidered revoked.
815
816 If --crlfile is provided several times, the last set value will
817 be used.
818
819 Example:
820 curl --crlfile rejects.txt https://example.com
821
822 See also --cacert and --capath.
823
824 --curves <algorithm list>
825 (TLS) Tells curl to request specific curves to use during SSL
826 session establishment according to RFC 8422, 5.1. Multiple al‐
827 gorithms can be provided by separating them with ":" (e.g.
828 "X25519:P-521"). The parameter is available identically in the
829 "openssl s_client/s_server" utilities.
830
831 --curves allows a OpenSSL powered curl to make SSL-connections
832 with exactly the (EC) curve requested by the client, avoiding
833 nontransparent client/server negotiations.
834
835 If this option is set, the default curves list built into
836 openssl will be ignored.
837
838 If --curves is provided several times, the last set value will
839 be used.
840
841 Example:
842 curl --curves X25519 https://example.com
843
844 See also --ciphers. Added in 7.73.0.
845
846 --data-ascii <data>
847 (HTTP) This is just an alias for -d, --data.
848
849 --data-ascii can be used several times in a command line
850
851 Example:
852 curl --data-ascii @file https://example.com
853
854 See also --data-binary, --data-raw and --data-urlencode.
855
856 --data-binary <data>
857 (HTTP) This posts data exactly as specified with no extra pro‐
858 cessing whatsoever.
859
860 If you start the data with the letter @, the rest should be a
861 filename. Data is posted in a similar manner as -d, --data does,
862 except that newlines and carriage returns are preserved and con‐
863 versions are never done.
864
865 Like -d, --data the default content-type sent to the server is
866 application/x-www-form-urlencoded. If you want the data to be
867 treated as arbitrary binary data by the server then set the con‐
868 tent-type to octet-stream: -H "Content-Type: application/octet-
869 stream".
870
871 If this option is used several times, the ones following the
872 first will append data as described in -d, --data.
873
874 --data-binary can be used several times in a command line
875
876 Example:
877 curl --data-binary @filename https://example.com
878
879 See also --data-ascii.
880
881 --data-raw <data>
882 (HTTP) This posts data similarly to -d, --data but without the
883 special interpretation of the @ character.
884
885 --data-raw can be used several times in a command line
886
887 Examples:
888 curl --data-raw "hello" https://example.com
889 curl --data-raw "@at@at@" https://example.com
890
891 See also -d, --data. Added in 7.43.0.
892
893 --data-urlencode <data>
894 (HTTP) This posts data, similar to the other -d, --data options
895 with the exception that this performs URL-encoding.
896
897 To be CGI-compliant, the <data> part should begin with a name
898 followed by a separator and a content specification. The <data>
899 part can be passed to curl using one of the following syntaxes:
900
901 content
902 This will make curl URL-encode the content and pass that
903 on. Just be careful so that the content does not contain
904 any = or @ symbols, as that will then make the syntax
905 match one of the other cases below!
906
907 =content
908 This will make curl URL-encode the content and pass that
909 on. The preceding = symbol is not included in the data.
910
911 name=content
912 This will make curl URL-encode the content part and pass
913 that on. Note that the name part is expected to be URL-
914 encoded already.
915
916 @filename
917 This will make curl load data from the given file (in‐
918 cluding any newlines), URL-encode that data and pass it
919 on in the POST.
920
921 name@filename
922 This will make curl load data from the given file (in‐
923 cluding any newlines), URL-encode that data and pass it
924 on in the POST. The name part gets an equal sign ap‐
925 pended, resulting in name=urlencoded-file-content. Note
926 that the name is expected to be URL-encoded already.
927
928 --data-urlencode can be used several times in a command line
929
930 Examples:
931 curl --data-urlencode name=val https://example.com
932 curl --data-urlencode =encodethis https://example.com
933 curl --data-urlencode name@file https://example.com
934 curl --data-urlencode @fileonly https://example.com
935
936 See also -d, --data and --data-raw.
937
938 -d, --data <data>
939 (HTTP MQTT) Sends the specified data in a POST request to the
940 HTTP server, in the same way that a browser does when a user has
941 filled in an HTML form and presses the submit button. This will
942 cause curl to pass the data to the server using the content-type
943 application/x-www-form-urlencoded. Compare to -F, --form.
944
945 --data-raw is almost the same but does not have a special inter‐
946 pretation of the @ character. To post data purely binary, you
947 should instead use the --data-binary option. To URL-encode the
948 value of a form field you may use --data-urlencode.
949
950 If any of these options is used more than once on the same com‐
951 mand line, the data pieces specified will be merged with a sepa‐
952 rating &-symbol. Thus, using '-d name=daniel -d skill=lousy'
953 would generate a post chunk that looks like
954 'name=daniel&skill=lousy'.
955
956 If you start the data with the letter @, the rest should be a
957 file name to read the data from, or - if you want curl to read
958 the data from stdin. Posting data from a file named 'foobar'
959 would thus be done with -d, --data @foobar. When -d, --data is
960 told to read from a file like that, carriage returns and new‐
961 lines will be stripped out. If you do not want the @ character
962 to have a special interpretation use --data-raw instead.
963
964 The data for this option is passed on to the server exactly as
965 provided on the command line. curl will not convert it, change
966 it or improve it. It is up to the user to provide the data in
967 the correct form.
968
969 -d, --data can be used several times in a command line
970
971 Examples:
972 curl -d "name=curl" https://example.com
973 curl -d "name=curl" -d "tool=cmdline" https://example.com
974 curl -d @filename https://example.com
975
976 See also --data-binary, --data-urlencode and --data-raw. This
977 option is mutually exclusive to -F, --form and -I, --head and
978 -T, --upload-file.
979
980 --delegation <LEVEL>
981 (GSS/kerberos) Set LEVEL to tell the server what it is allowed
982 to delegate when it comes to user credentials.
983
984 none Do not allow any delegation.
985
986 policy Delegates if and only if the OK-AS-DELEGATE flag is set
987 in the Kerberos service ticket, which is a matter of
988 realm policy.
989
990 always Unconditionally allow the server to delegate.
991
992 If --delegation is provided several times, the last set value
993 will be used.
994
995 Example:
996 curl --delegation "none" https://example.com
997
998 See also -k, --insecure and --ssl.
999
1000 --digest
1001 (HTTP) Enables HTTP Digest authentication. This is an authenti‐
1002 cation scheme that prevents the password from being sent over
1003 the wire in clear text. Use this in combination with the normal
1004 -u, --user option to set user name and password.
1005
1006 Providing --digest multiple times has no extra effect. Disable
1007 it again with --no-digest.
1008
1009 Example:
1010 curl -u name:password --digest https://example.com
1011
1012 See also -u, --user, --proxy-digest and --anyauth. This option
1013 is mutually exclusive to --basic and --ntlm and --negotiate.
1014
1015 --disable-eprt
1016 (FTP) Tell curl to disable the use of the EPRT and LPRT commands
1017 when doing active FTP transfers. Curl will normally always first
1018 attempt to use EPRT, then LPRT before using PORT, but with this
1019 option, it will use PORT right away. EPRT and LPRT are exten‐
1020 sions to the original FTP protocol, and may not work on all
1021 servers, but they enable more functionality in a better way than
1022 the traditional PORT command.
1023
1024 --eprt can be used to explicitly enable EPRT again and --no-eprt
1025 is an alias for --disable-eprt.
1026
1027 If the server is accessed using IPv6, this option will have no
1028 effect as EPRT is necessary then.
1029
1030 Disabling EPRT only changes the active behavior. If you want to
1031 switch to passive mode you need to not use -P, --ftp-port or
1032 force it with --ftp-pasv.
1033
1034 Providing --disable-eprt multiple times has no extra effect.
1035 Disable it again with --no-disable-eprt.
1036
1037 Example:
1038 curl --disable-eprt ftp://example.com/
1039
1040 See also --disable-epsv and -P, --ftp-port.
1041
1042 --disable-epsv
1043 (FTP) Tell curl to disable the use of the EPSV command when do‐
1044 ing passive FTP transfers. Curl will normally always first at‐
1045 tempt to use EPSV before PASV, but with this option, it will not
1046 try using EPSV.
1047
1048 --epsv can be used to explicitly enable EPSV again and --no-epsv
1049 is an alias for --disable-epsv.
1050
1051 If the server is an IPv6 host, this option will have no effect
1052 as EPSV is necessary then.
1053
1054 Disabling EPSV only changes the passive behavior. If you want to
1055 switch to active mode you need to use -P, --ftp-port.
1056
1057 Providing --disable-epsv multiple times has no extra effect.
1058 Disable it again with --no-disable-epsv.
1059
1060 Example:
1061 curl --disable-epsv ftp://example.com/
1062
1063 See also --disable-eprt and -P, --ftp-port.
1064
1065 -q, --disable
1066 If used as the first parameter on the command line, the curlrc
1067 config file will not be read and used. See the -K, --config for
1068 details on the default config file search path.
1069
1070 Providing -q, --disable multiple times has no extra effect.
1071 Disable it again with --no-disable.
1072
1073 Example:
1074 curl -q https://example.com
1075
1076 See also -K, --config.
1077
1078 --disallow-username-in-url
1079 (HTTP) This tells curl to exit if passed a URL containing a
1080 username. This is probably most useful when the URL is being
1081 provided at runtime or similar.
1082
1083 Providing --disallow-username-in-url multiple times has no extra
1084 effect. Disable it again with --no-disallow-username-in-url.
1085
1086 Example:
1087 curl --disallow-username-in-url https://example.com
1088
1089 See also --proto. Added in 7.61.0.
1090
1091 --dns-interface <interface>
1092 (DNS) Tell curl to send outgoing DNS requests through <inter‐
1093 face>. This option is a counterpart to --interface (which does
1094 not affect DNS). The supplied string must be an interface name
1095 (not an address).
1096
1097 If --dns-interface is provided several times, the last set value
1098 will be used.
1099
1100 Example:
1101 curl --dns-interface eth0 https://example.com
1102
1103 See also --dns-ipv4-addr and --dns-ipv6-addr. --dns-interface
1104 requires that the underlying libcurl was built to support c-
1105 ares. Added in 7.33.0.
1106
1107 --dns-ipv4-addr <address>
1108 (DNS) Tell curl to bind to <ip-address> when making IPv4 DNS re‐
1109 quests, so that the DNS requests originate from this address.
1110 The argument should be a single IPv4 address.
1111
1112 If --dns-ipv4-addr is provided several times, the last set value
1113 will be used.
1114
1115 Example:
1116 curl --dns-ipv4-addr 10.1.2.3 https://example.com
1117
1118 See also --dns-interface and --dns-ipv6-addr. --dns-ipv4-addr
1119 requires that the underlying libcurl was built to support c-
1120 ares. Added in 7.33.0.
1121
1122 --dns-ipv6-addr <address>
1123 (DNS) Tell curl to bind to <ip-address> when making IPv6 DNS re‐
1124 quests, so that the DNS requests originate from this address.
1125 The argument should be a single IPv6 address.
1126
1127 If --dns-ipv6-addr is provided several times, the last set value
1128 will be used.
1129
1130 Example:
1131 curl --dns-ipv6-addr 2a04:4e42::561 https://example.com
1132
1133 See also --dns-interface and --dns-ipv4-addr. --dns-ipv6-addr
1134 requires that the underlying libcurl was built to support c-
1135 ares. Added in 7.33.0.
1136
1137 --dns-servers <addresses>
1138 Set the list of DNS servers to be used instead of the system de‐
1139 fault. The list of IP addresses should be separated with com‐
1140 mas. Port numbers may also optionally be given as :<port-number>
1141 after each IP address.
1142
1143 If --dns-servers is provided several times, the last set value
1144 will be used.
1145
1146 Example:
1147 curl --dns-servers 192.168.0.1,192.168.0.2 https://example.com
1148
1149 See also --dns-interface and --dns-ipv4-addr. --dns-servers re‐
1150 quires that the underlying libcurl was built to support c-ares.
1151 Added in 7.33.0.
1152
1153 --doh-cert-status
1154 Same as --cert-status but used for DoH (DNS-over-HTTPS).
1155
1156 Providing --doh-cert-status multiple times has no extra effect.
1157 Disable it again with --no-doh-cert-status.
1158
1159 Example:
1160 curl --doh-cert-status --doh-url https://doh.example https://example.com
1161
1162 See also --doh-insecure. Added in 7.76.0.
1163
1164 --doh-insecure
1165 Same as -k, --insecure but used for DoH (DNS-over-HTTPS).
1166
1167 Providing --doh-insecure multiple times has no extra effect.
1168 Disable it again with --no-doh-insecure.
1169
1170 Example:
1171 curl --doh-insecure --doh-url https://doh.example https://example.com
1172
1173 See also --doh-url. Added in 7.76.0.
1174
1175 --doh-url <URL>
1176 Specifies which DNS-over-HTTPS (DoH) server to use to resolve
1177 hostnames, instead of using the default name resolver mechanism.
1178 The URL must be HTTPS.
1179
1180 Some SSL options that you set for your transfer will apply to
1181 DoH since the name lookups take place over SSL. However, the
1182 certificate verification settings are not inherited and can be
1183 controlled separately via --doh-insecure and --doh-cert-status.
1184
1185 This option is unset if an empty string "" is used as the URL.
1186 (Added in 7.85.0)
1187
1188 If --doh-url is provided several times, the last set value will
1189 be used.
1190
1191 Example:
1192 curl --doh-url https://doh.example https://example.com
1193
1194 See also --doh-insecure. Added in 7.62.0.
1195
1196 -D, --dump-header <filename>
1197 (HTTP FTP) Write the received protocol headers to the specified
1198 file. If no headers are received, the use of this option will
1199 create an empty file.
1200
1201 When used in FTP, the FTP server response lines are considered
1202 being "headers" and thus are saved there.
1203
1204 Having multiple transfers in one set of operations (i.e. the
1205 URLs in one -:, --next clause), will append them to the same
1206 file, separated by a blank line.
1207
1208 If -D, --dump-header is provided several times, the last set
1209 value will be used.
1210
1211 Example:
1212 curl --dump-header store.txt https://example.com
1213
1214 See also -o, --output.
1215
1216 --egd-file <file>
1217 (TLS) Deprecated option. This option is ignored by curl since
1218 7.84.0. Prior to that it only had an effect on curl if built to
1219 use old versions of OpenSSL.
1220
1221 Specify the path name to the Entropy Gathering Daemon socket.
1222 The socket is used to seed the random engine for SSL connec‐
1223 tions.
1224
1225 If --egd-file is provided several times, the last set value will
1226 be used.
1227
1228 Example:
1229 curl --egd-file /random/here https://example.com
1230
1231 See also --random-file.
1232
1233 --engine <name>
1234 (TLS) Select the OpenSSL crypto engine to use for cipher opera‐
1235 tions. Use --engine list to print a list of build-time supported
1236 engines. Note that not all (and possibly none) of the engines
1237 may be available at runtime.
1238
1239 If --engine is provided several times, the last set value will
1240 be used.
1241
1242 Example:
1243 curl --engine flavor https://example.com
1244
1245 See also --ciphers and --curves.
1246
1247 --etag-compare <file>
1248 (HTTP) This option makes a conditional HTTP request for the spe‐
1249 cific ETag read from the given file by sending a custom If-None-
1250 Match header using the stored ETag.
1251
1252 For correct results, make sure that the specified file contains
1253 only a single line with the desired ETag. An empty file is
1254 parsed as an empty ETag.
1255
1256 Use the option --etag-save to first save the ETag from a re‐
1257 sponse, and then use this option to compare against the saved
1258 ETag in a subsequent request.
1259
1260 If --etag-compare is provided several times, the last set value
1261 will be used.
1262
1263 Example:
1264 curl --etag-compare etag.txt https://example.com
1265
1266 See also --etag-save and -z, --time-cond. Added in 7.68.0.
1267
1268 --etag-save <file>
1269 (HTTP) This option saves an HTTP ETag to the specified file. An
1270 ETag is a caching related header, usually returned in a re‐
1271 sponse.
1272
1273 If no ETag is sent by the server, an empty file is created.
1274
1275 If --etag-save is provided several times, the last set value
1276 will be used.
1277
1278 Example:
1279 curl --etag-save storetag.txt https://example.com
1280
1281 See also --etag-compare. Added in 7.68.0.
1282
1283 --expect100-timeout <seconds>
1284 (HTTP) Maximum time in seconds that you allow curl to wait for a
1285 100-continue response when curl emits an Expects: 100-continue
1286 header in its request. By default curl will wait one second.
1287 This option accepts decimal values! When curl stops waiting, it
1288 will continue as if the response has been received.
1289
1290 The decimal value needs to provided using a dot (.) as decimal
1291 separator - not the local version even if it might be using an‐
1292 other separator.
1293
1294 If --expect100-timeout is provided several times, the last set
1295 value will be used.
1296
1297 Example:
1298 curl --expect100-timeout 2.5 -T file https://example.com
1299
1300 See also --connect-timeout. Added in 7.47.0.
1301
1302 --fail-early
1303 Fail and exit on the first detected transfer error.
1304
1305 When curl is used to do multiple transfers on the command line,
1306 it will attempt to operate on each given URL, one by one. By de‐
1307 fault, it will ignore errors if there are more URLs given and
1308 the last URL's success will determine the error code curl re‐
1309 turns. So early failures will be "hidden" by subsequent success‐
1310 ful transfers.
1311
1312 Using this option, curl will instead return an error on the
1313 first transfer that fails, independent of the amount of URLs
1314 that are given on the command line. This way, no transfer fail‐
1315 ures go undetected by scripts and similar.
1316
1317 This option does not imply -f, --fail, which causes transfers to
1318 fail due to the server's HTTP status code. You can combine the
1319 two options, however note -f, --fail is not global and is there‐
1320 fore contained by -:, --next.
1321
1322 This option is global and does not need to be specified for each
1323 use of --next.
1324
1325 Providing --fail-early multiple times has no extra effect. Dis‐
1326 able it again with --no-fail-early.
1327
1328 Example:
1329 curl --fail-early https://example.com https://two.example
1330
1331 See also -f, --fail and --fail-with-body. Added in 7.52.0.
1332
1333 --fail-with-body
1334 (HTTP) Return an error on server errors where the HTTP response
1335 code is 400 or greater). In normal cases when an HTTP server
1336 fails to deliver a document, it returns an HTML document stating
1337 so (which often also describes why and more). This flag will
1338 still allow curl to output and save that content but also to re‐
1339 turn error 22.
1340
1341 This is an alternative option to -f, --fail which makes curl
1342 fail for the same circumstances but without saving the content.
1343
1344 Providing --fail-with-body multiple times has no extra effect.
1345 Disable it again with --no-fail-with-body.
1346
1347 Example:
1348 curl --fail-with-body https://example.com
1349
1350 See also -f, --fail. This option is mutually exclusive to -f,
1351 --fail. Added in 7.76.0.
1352
1353 -f, --fail
1354 (HTTP) Fail fast with no output at all on server errors. This is
1355 useful to enable scripts and users to better deal with failed
1356 attempts. In normal cases when an HTTP server fails to deliver a
1357 document, it returns an HTML document stating so (which often
1358 also describes why and more). This flag will prevent curl from
1359 outputting that and return error 22.
1360
1361 This method is not fail-safe and there are occasions where non-
1362 successful response codes will slip through, especially when au‐
1363 thentication is involved (response codes 401 and 407).
1364
1365 Providing -f, --fail multiple times has no extra effect. Dis‐
1366 able it again with --no-fail.
1367
1368 Example:
1369 curl --fail https://example.com
1370
1371 See also --fail-with-body. This option is mutually exclusive to
1372 --fail-with-body.
1373
1374 --false-start
1375 (TLS) Tells curl to use false start during the TLS handshake.
1376 False start is a mode where a TLS client will start sending ap‐
1377 plication data before verifying the server's Finished message,
1378 thus saving a round trip when performing a full handshake.
1379
1380 This is currently only implemented in the NSS and Secure Trans‐
1381 port (on iOS 7.0 or later, or OS X 10.9 or later) backends.
1382
1383 Providing --false-start multiple times has no extra effect.
1384 Disable it again with --no-false-start.
1385
1386 Example:
1387 curl --false-start https://example.com
1388
1389 See also --tcp-fastopen. Added in 7.42.0.
1390
1391 --form-escape
1392 (HTTP) Tells curl to pass on names of multipart form fields and
1393 files using backslash-escaping instead of percent-encoding.
1394
1395 If --form-escape is provided several times, the last set value
1396 will be used.
1397
1398 Example:
1399 curl --form-escape -F 'field\name=curl' -F 'file=@load"this' https://example.com
1400
1401 See also -F, --form. Added in 7.81.0.
1402
1403 --form-string <name=string>
1404 (HTTP SMTP IMAP) Similar to -F, --form except that the value
1405 string for the named parameter is used literally. Leading '@'
1406 and '<' characters, and the ';type=' string in the value have no
1407 special meaning. Use this in preference to -F, --form if there's
1408 any possibility that the string value may accidentally trigger
1409 the '@' or '<' features of -F, --form.
1410
1411 --form-string can be used several times in a command line
1412
1413 Example:
1414 curl --form-string "data" https://example.com
1415
1416 See also -F, --form.
1417
1418 -F, --form <name=content>
1419 (HTTP SMTP IMAP) For HTTP protocol family, this lets curl emu‐
1420 late a filled-in form in which a user has pressed the submit
1421 button. This causes curl to POST data using the Content-Type
1422 multipart/form-data according to RFC 2388.
1423
1424 For SMTP and IMAP protocols, this is the means to compose a mul‐
1425 tipart mail message to transmit.
1426
1427 This enables uploading of binary files etc. To force the 'con‐
1428 tent' part to be a file, prefix the file name with an @ sign. To
1429 just get the content part from a file, prefix the file name with
1430 the symbol <. The difference between @ and < is then that @
1431 makes a file get attached in the post as a file upload, while
1432 the < makes a text field and just get the contents for that text
1433 field from a file.
1434
1435 Tell curl to read content from stdin instead of a file by using
1436 - as filename. This goes for both @ and < constructs. When stdin
1437 is used, the contents is buffered in memory first by curl to de‐
1438 termine its size and allow a possible resend. Defining a part's
1439 data from a named non-regular file (such as a named pipe or sim‐
1440 ilar) is unfortunately not subject to buffering and will be ef‐
1441 fectively read at transmission time; since the full size is un‐
1442 known before the transfer starts, such data is sent as chunks by
1443 HTTP and rejected by IMAP.
1444
1445 Example: send an image to an HTTP server, where 'profile' is the
1446 name of the form-field to which the file portrait.jpg will be
1447 the input:
1448
1449 curl -F profile=@portrait.jpg https://example.com/upload.cgi
1450
1451 Example: send your name and shoe size in two text fields to the
1452 server:
1453
1454 curl -F name=John -F shoesize=11 https://example.com/
1455
1456 Example: send your essay in a text field to the server. Send it
1457 as a plain text field, but get the contents for it from a local
1458 file:
1459
1460 curl -F "story=<hugefile.txt" https://example.com/
1461
1462 You can also tell curl what Content-Type to use by using
1463 'type=', in a manner similar to:
1464
1465 curl -F "web=@index.html;type=text/html" example.com
1466
1467 or
1468
1469 curl -F "name=daniel;type=text/foo" example.com
1470
1471 You can also explicitly change the name field of a file upload
1472 part by setting filename=, like this:
1473
1474 curl -F "file=@localfile;filename=nameinpost" example.com
1475
1476 If filename/path contains ',' or ';', it must be quoted by dou‐
1477 ble-quotes like:
1478
1479 curl -F "file=@\"local,file\";filename=\"name;in;post\"" example.com
1480
1481 or
1482
1483 curl -F 'file=@"local,file";filename="name;in;post"' example.com
1484
1485 Note that if a filename/path is quoted by double-quotes, any
1486 double-quote or backslash within the filename must be escaped by
1487 backslash.
1488
1489 Quoting must also be applied to non-file data if it contains
1490 semicolons, leading/trailing spaces or leading double quotes:
1491
1492 curl -F 'colors="red; green; blue";type=text/x-myapp' example.com
1493
1494 You can add custom headers to the field by setting headers=,
1495 like
1496
1497 curl -F "submit=OK;headers=\"X-submit-type: OK\"" example.com
1498
1499 or
1500
1501 curl -F "submit=OK;headers=@headerfile" example.com
1502
1503 The headers= keyword may appear more that once and above notes
1504 about quoting apply. When headers are read from a file, Empty
1505 lines and lines starting with '#' are comments and ignored; each
1506 header can be folded by splitting between two words and starting
1507 the continuation line with a space; embedded carriage-returns
1508 and trailing spaces are stripped. Here is an example of a
1509 header file contents:
1510
1511 # This file contain two headers.
1512 X-header-1: this is a header
1513
1514 # The following header is folded.
1515 X-header-2: this is
1516 another header
1517
1518 To support sending multipart mail messages, the syntax is ex‐
1519 tended as follows:
1520 - name can be omitted: the equal sign is the first character of
1521 the argument,
1522 - if data starts with '(', this signals to start a new multi‐
1523 part: it can be followed by a content type specification.
1524 - a multipart can be terminated with a '=)' argument.
1525
1526 Example: the following command sends an SMTP mime email consist‐
1527 ing in an inline part in two alternative formats: plain text and
1528 HTML. It attaches a text file:
1529
1530 curl -F '=(;type=multipart/alternative' \
1531 -F '=plain text message' \
1532 -F '= <body>HTML message</body>;type=text/html' \
1533 -F '=)' -F '=@textfile.txt' ... smtp://example.com
1534
1535 Data can be encoded for transfer using encoder=. Available en‐
1536 codings are binary and 8bit that do nothing else than adding the
1537 corresponding Content-Transfer-Encoding header, 7bit that only
1538 rejects 8-bit characters with a transfer error, quoted-printable
1539 and base64 that encodes data according to the corresponding
1540 schemes, limiting lines length to 76 characters.
1541
1542 Example: send multipart mail with a quoted-printable text mes‐
1543 sage and a base64 attached file:
1544
1545 curl -F '=text message;encoder=quoted-printable' \
1546 -F '=@localfile;encoder=base64' ... smtp://example.com
1547
1548 See further examples and details in the MANUAL.
1549
1550 -F, --form can be used several times in a command line
1551
1552 Example:
1553 curl --form "name=curl" --form "file=@loadthis" https://example.com
1554
1555 See also -d, --data, --form-string and --form-escape. This op‐
1556 tion is mutually exclusive to -d, --data and -I, --head and -T,
1557 --upload-file.
1558
1559 --ftp-account <data>
1560 (FTP) When an FTP server asks for "account data" after user name
1561 and password has been provided, this data is sent off using the
1562 ACCT command.
1563
1564 If --ftp-account is provided several times, the last set value
1565 will be used.
1566
1567 Example:
1568 curl --ftp-account "mr.robot" ftp://example.com/
1569
1570 See also -u, --user.
1571
1572 --ftp-alternative-to-user <command>
1573 (FTP) If authenticating with the USER and PASS commands fails,
1574 send this command. When connecting to Tumbleweed's Secure
1575 Transport server over FTPS using a client certificate, using
1576 "SITE AUTH" will tell the server to retrieve the username from
1577 the certificate.
1578
1579 If --ftp-alternative-to-user is provided several times, the last
1580 set value will be used.
1581
1582 Example:
1583 curl --ftp-alternative-to-user "U53r" ftp://example.com
1584
1585 See also --ftp-account and -u, --user.
1586
1587 --ftp-create-dirs
1588 (FTP SFTP) When an FTP or SFTP URL/operation uses a path that
1589 does not currently exist on the server, the standard behavior of
1590 curl is to fail. Using this option, curl will instead attempt to
1591 create missing directories.
1592
1593 Providing --ftp-create-dirs multiple times has no extra effect.
1594 Disable it again with --no-ftp-create-dirs.
1595
1596 Example:
1597 curl --ftp-create-dirs -T file ftp://example.com/remote/path/file
1598
1599 See also --create-dirs.
1600
1601 --ftp-method <method>
1602 (FTP) Control what method curl should use to reach a file on an
1603 FTP(S) server. The method argument should be one of the follow‐
1604 ing alternatives:
1605
1606 multicwd
1607 curl does a single CWD operation for each path part in
1608 the given URL. For deep hierarchies this means many com‐
1609 mands. This is how RFC 1738 says it should be done. This
1610 is the default but the slowest behavior.
1611
1612 nocwd curl does no CWD at all. curl will do SIZE, RETR, STOR
1613 etc and give a full path to the server for all these com‐
1614 mands. This is the fastest behavior.
1615
1616 singlecwd
1617 curl does one CWD with the full target directory and then
1618 operates on the file "normally" (like in the multicwd
1619 case). This is somewhat more standards compliant than
1620 'nocwd' but without the full penalty of 'multicwd'.
1621
1622 If --ftp-method is provided several times, the last set value
1623 will be used.
1624
1625 Examples:
1626 curl --ftp-method multicwd ftp://example.com/dir1/dir2/file
1627 curl --ftp-method nocwd ftp://example.com/dir1/dir2/file
1628 curl --ftp-method singlecwd ftp://example.com/dir1/dir2/file
1629
1630 See also -l, --list-only.
1631
1632 --ftp-pasv
1633 (FTP) Use passive mode for the data connection. Passive is the
1634 internal default behavior, but using this option can be used to
1635 override a previous -P, --ftp-port option.
1636
1637 Reversing an enforced passive really is not doable but you must
1638 then instead enforce the correct -P, --ftp-port again.
1639
1640 Passive mode means that curl will try the EPSV command first and
1641 then PASV, unless --disable-epsv is used.
1642
1643 Providing --ftp-pasv multiple times has no extra effect. Dis‐
1644 able it again with --no-ftp-pasv.
1645
1646 Example:
1647 curl --ftp-pasv ftp://example.com/
1648
1649 See also --disable-epsv.
1650
1651 -P, --ftp-port <address>
1652 (FTP) Reverses the default initiator/listener roles when con‐
1653 necting with FTP. This option makes curl use active mode. curl
1654 then tells the server to connect back to the client's specified
1655 address and port, while passive mode asks the server to setup an
1656 IP address and port for it to connect to. <address> should be
1657 one of:
1658
1659 interface
1660 e.g. "eth0" to specify which interface's IP address you
1661 want to use (Unix only)
1662
1663 IP address
1664 e.g. "192.168.10.1" to specify the exact IP address
1665
1666 host name
1667 e.g. "my.host.domain" to specify the machine
1668
1669 - make curl pick the same IP address that is already used
1670 for the control connection
1671
1672 Disable the use of PORT with --ftp-pasv. Disable the attempt to
1673 use the EPRT command instead of PORT by using --disable-eprt.
1674 EPRT is really PORT++.
1675
1676 You can also append ":[start]-[end]" to the right of the ad‐
1677 dress, to tell curl what TCP port range to use. That means you
1678 specify a port range, from a lower to a higher number. A single
1679 number works as well, but do note that it increases the risk of
1680 failure since the port may not be available.
1681
1682
1683 If -P, --ftp-port is provided several times, the last set value
1684 will be used.
1685
1686 Examples:
1687 curl -P - ftp:/example.com
1688 curl -P eth0 ftp:/example.com
1689 curl -P 192.168.0.2 ftp:/example.com
1690
1691 See also --ftp-pasv and --disable-eprt.
1692
1693 --ftp-pret
1694 (FTP) Tell curl to send a PRET command before PASV (and EPSV).
1695 Certain FTP servers, mainly drftpd, require this non-standard
1696 command for directory listings as well as up and downloads in
1697 PASV mode.
1698
1699 Providing --ftp-pret multiple times has no extra effect. Dis‐
1700 able it again with --no-ftp-pret.
1701
1702 Example:
1703 curl --ftp-pret ftp://example.com/
1704
1705 See also -P, --ftp-port and --ftp-pasv.
1706
1707 --ftp-skip-pasv-ip
1708 (FTP) Tell curl to not use the IP address the server suggests in
1709 its response to curl's PASV command when curl connects the data
1710 connection. Instead curl will re-use the same IP address it al‐
1711 ready uses for the control connection.
1712
1713 Since curl 7.74.0 this option is enabled by default.
1714
1715 This option has no effect if PORT, EPRT or EPSV is used instead
1716 of PASV.
1717
1718 Providing --ftp-skip-pasv-ip multiple times has no extra effect.
1719 Disable it again with --no-ftp-skip-pasv-ip.
1720
1721 Example:
1722 curl --ftp-skip-pasv-ip ftp://example.com/
1723
1724 See also --ftp-pasv.
1725
1726 --ftp-ssl-ccc-mode <active/passive>
1727 (FTP) Sets the CCC mode. The passive mode will not initiate the
1728 shutdown, but instead wait for the server to do it, and will not
1729 reply to the shutdown from the server. The active mode initiates
1730 the shutdown and waits for a reply from the server.
1731
1732 Providing --ftp-ssl-ccc-mode multiple times has no extra effect.
1733 Disable it again with --no-ftp-ssl-ccc-mode.
1734
1735 Example:
1736 curl --ftp-ssl-ccc-mode active --ftp-ssl-ccc ftps://example.com/
1737
1738 See also --ftp-ssl-ccc.
1739
1740 --ftp-ssl-ccc
1741 (FTP) Use CCC (Clear Command Channel) Shuts down the SSL/TLS
1742 layer after authenticating. The rest of the control channel com‐
1743 munication will be unencrypted. This allows NAT routers to fol‐
1744 low the FTP transaction. The default mode is passive.
1745
1746 Providing --ftp-ssl-ccc multiple times has no extra effect.
1747 Disable it again with --no-ftp-ssl-ccc.
1748
1749 Example:
1750 curl --ftp-ssl-ccc ftps://example.com/
1751
1752 See also --ssl and --ftp-ssl-ccc-mode.
1753
1754 --ftp-ssl-control
1755 (FTP) Require SSL/TLS for the FTP login, clear for transfer.
1756 Allows secure authentication, but non-encrypted data transfers
1757 for efficiency. Fails the transfer if the server does not sup‐
1758 port SSL/TLS.
1759
1760 Providing --ftp-ssl-control multiple times has no extra effect.
1761 Disable it again with --no-ftp-ssl-control.
1762
1763 Example:
1764 curl --ftp-ssl-control ftp://example.com
1765
1766 See also --ssl.
1767
1768 -G, --get
1769 When used, this option will make all data specified with -d,
1770 --data, --data-binary or --data-urlencode to be used in an HTTP
1771 GET request instead of the POST request that otherwise would be
1772 used. The data will be appended to the URL with a '?' separator.
1773
1774 If used in combination with -I, --head, the POST data will in‐
1775 stead be appended to the URL with a HEAD request.
1776
1777 Providing -G, --get multiple times has no extra effect. Disable
1778 it again with --no-get.
1779
1780 Examples:
1781 curl --get https://example.com
1782 curl --get -d "tool=curl" -d "age=old" https://example.com
1783 curl --get -I -d "tool=curl" https://example.com
1784
1785 See also -d, --data and -X, --request.
1786
1787 -g, --globoff
1788 This option switches off the "URL globbing parser". When you set
1789 this option, you can specify URLs that contain the letters {}[]
1790 without having curl itself interpret them. Note that these let‐
1791 ters are not normal legal URL contents but they should be en‐
1792 coded according to the URI standard.
1793
1794 Providing -g, --globoff multiple times has no extra effect.
1795 Disable it again with --no-globoff.
1796
1797 Example:
1798 curl -g "https://example.com/{[]}}}}"
1799
1800 See also -K, --config and -q, --disable.
1801
1802 --happy-eyeballs-timeout-ms <milliseconds>
1803 Happy Eyeballs is an algorithm that attempts to connect to both
1804 IPv4 and IPv6 addresses for dual-stack hosts, giving IPv6 a
1805 head-start of the specified number of milliseconds. If the IPv6
1806 address cannot be connected to within that time, then a connec‐
1807 tion attempt is made to the IPv4 address in parallel. The first
1808 connection to be established is the one that is used.
1809
1810 The range of suggested useful values is limited. Happy Eyeballs
1811 RFC 6555 says "It is RECOMMENDED that connection attempts be
1812 paced 150-250 ms apart to balance human factors against network
1813 load." libcurl currently defaults to 200 ms. Firefox and Chrome
1814 currently default to 300 ms.
1815
1816 If --happy-eyeballs-timeout-ms is provided several times, the
1817 last set value will be used.
1818
1819 Example:
1820 curl --happy-eyeballs-timeout-ms 500 https://example.com
1821
1822 See also -m, --max-time and --connect-timeout. Added in 7.59.0.
1823
1824 --haproxy-clientip
1825 (HTTP) Sets a client IP in HAProxy PROXY protocol v1 header at
1826 the beginning of the connection.
1827
1828 For valid requests, IPv4 addresses must be indicated as a series
1829 of exactly 4 integers in the range [0..255] inclusive written in
1830 decimal representation separated by exactly one dot between each
1831 other. Heading zeroes are not permitted in front of numbers in
1832 order to avoid any possible confusion with octal numbers. IPv6
1833 addresses must be indicated as series of 4 hexadecimal digits
1834 (upper or lower case) delimited by colons between each other,
1835 with the acceptance of one double colon sequence to replace the
1836 largest acceptable range of consecutive zeroes. The total number
1837 of decoded bits must exactly be 128.
1838
1839 Otherwise, any string can be accepted for the client IP and will
1840 be sent.
1841
1842 It replaces `--haproxy-protocol` if used, it is not necessary to
1843 specify both flags.
1844
1845 This option is primarily useful when sending test requests to
1846 verify a service is working as intended.
1847
1848 If --haproxy-clientip is provided several times, the last set
1849 value will be used.
1850
1851 Example:
1852 curl --haproxy-clientip $IP
1853
1854 See also -x, --proxy. Added in 8.2.0.
1855
1856 --haproxy-protocol
1857 (HTTP) Send a HAProxy PROXY protocol v1 header at the beginning
1858 of the connection. This is used by some load balancers and re‐
1859 verse proxies to indicate the client's true IP address and port.
1860
1861 This option is primarily useful when sending test requests to a
1862 service that expects this header.
1863
1864 Providing --haproxy-protocol multiple times has no extra effect.
1865 Disable it again with --no-haproxy-protocol.
1866
1867 Example:
1868 curl --haproxy-protocol https://example.com
1869
1870 See also -x, --proxy. Added in 7.60.0.
1871
1872 -I, --head
1873 (HTTP FTP FILE) Fetch the headers only! HTTP-servers feature the
1874 command HEAD which this uses to get nothing but the header of a
1875 document. When used on an FTP or FILE file, curl displays the
1876 file size and last modification time only.
1877
1878 Providing -I, --head multiple times has no extra effect. Dis‐
1879 able it again with --no-head.
1880
1881 Example:
1882 curl -I https://example.com
1883
1884 See also -G, --get, -v, --verbose and --trace-ascii.
1885
1886 -H, --header <header/@file>
1887 (HTTP IMAP SMTP) Extra header to include in information sent.
1888 When used within an HTTP request, it is added to the regular re‐
1889 quest headers.
1890
1891 For an IMAP or SMTP MIME uploaded mail built with -F, --form op‐
1892 tions, it is prepended to the resulting MIME document, effec‐
1893 tively including it at the mail global level. It does not affect
1894 raw uploaded mails (Added in 7.56.0).
1895
1896 You may specify any number of extra headers. Note that if you
1897 should add a custom header that has the same name as one of the
1898 internal ones curl would use, your externally set header will be
1899 used instead of the internal one. This allows you to make even
1900 trickier stuff than curl would normally do. You should not re‐
1901 place internally set headers without knowing perfectly well what
1902 you are doing. Remove an internal header by giving a replacement
1903 without content on the right side of the colon, as in: -H
1904 "Host:". If you send the custom header with no-value then its
1905 header must be terminated with a semicolon, such as -H "X-Cus‐
1906 tom-Header;" to send "X-Custom-Header:".
1907
1908 curl will make sure that each header you add/replace is sent
1909 with the proper end-of-line marker, you should thus not add that
1910 as a part of the header content: do not add newlines or carriage
1911 returns, they will only mess things up for you.
1912
1913 This option can take an argument in @filename style, which then
1914 adds a header for each line in the input file. Using @- will
1915 make curl read the header file from stdin. Added in 7.55.0.
1916
1917 Please note that most anti-spam utilities check the presence and
1918 value of several MIME mail headers: these are "From:", "To:",
1919 "Date:" and "Subject:" among others and should be added with
1920 this option.
1921
1922 You need --proxy-header to send custom headers intended for an
1923 HTTP proxy. Added in 7.37.0.
1924
1925 Passing on a "Transfer-Encoding: chunked" header when doing an
1926 HTTP request with a request body, will make curl send the data
1927 using chunked encoding.
1928
1929 WARNING: headers set with this option will be set in all HTTP
1930 requests - even after redirects are followed, like when told
1931 with -L, --location. This can lead to the header being sent to
1932 other hosts than the original host, so sensitive headers should
1933 be used with caution combined with following redirects.
1934
1935 -H, --header can be used several times in a command line
1936
1937 Examples:
1938 curl -H "X-First-Name: Joe" https://example.com
1939 curl -H "User-Agent: yes-please/2000" https://example.com
1940 curl -H "Host:" https://example.com
1941 curl -H @headers.txt https://example.com
1942
1943 See also -A, --user-agent and -e, --referer.
1944
1945 -h, --help <category>
1946 Usage help. This lists all commands of the <category>. If no
1947 arg was provided, curl will display the most important command
1948 line arguments. If the argument "all" was provided, curl will
1949 display all options available. If the argument "category" was
1950 provided, curl will display all categories and their meanings.
1951
1952 Example:
1953 curl --help all
1954
1955 See also -v, --verbose.
1956
1957 --hostpubmd5 <md5>
1958 (SFTP SCP) Pass a string containing 32 hexadecimal digits. The
1959 string should be the 128 bit MD5 checksum of the remote host's
1960 public key, curl will refuse the connection with the host unless
1961 the md5sums match.
1962
1963 If --hostpubmd5 is provided several times, the last set value
1964 will be used.
1965
1966 Example:
1967 curl --hostpubmd5 e5c1c49020640a5ab0f2034854c321a8 sftp://example.com/
1968
1969 See also --hostpubsha256.
1970
1971 --hostpubsha256 <sha256>
1972 (SFTP SCP) Pass a string containing a Base64-encoded SHA256 hash
1973 of the remote host's public key. Curl will refuse the connection
1974 with the host unless the hashes match.
1975
1976 This feature requires libcurl to be built with libssh2 and does
1977 not work with other SSH backends.
1978
1979 If --hostpubsha256 is provided several times, the last set value
1980 will be used.
1981
1982 Example:
1983 curl --hostpubsha256 NDVkMTQxMGQ1ODdmMjQ3MjczYjAyOTY5MmRkMjVmNDQ= sftp://example.com/
1984
1985 See also --hostpubmd5. Added in 7.80.0.
1986
1987 --hsts <file name>
1988 (HTTPS) This option enables HSTS for the transfer. If the file
1989 name points to an existing HSTS cache file, that will be used.
1990 After a completed transfer, the cache will be saved to the file
1991 name again if it has been modified.
1992
1993 If curl is told to use HTTP:// for a transfer involving a host
1994 name that exists in the HSTS cache, it upgrades the transfer to
1995 use HTTPS. Each HSTS cache entry has an individual life time af‐
1996 ter which the upgrade is no longer performed.
1997
1998 Specify a "" file name (zero length) to avoid loading/saving and
1999 make curl just handle HSTS in memory.
2000
2001 If this option is used several times, curl will load contents
2002 from all the files but the last one will be used for saving.
2003
2004 --hsts can be used several times in a command line
2005
2006 Example:
2007 curl --hsts cache.txt https://example.com
2008
2009 See also --proto. Added in 7.74.0.
2010
2011 --http0.9
2012 (HTTP) Tells curl to be fine with HTTP version 0.9 response.
2013
2014 HTTP/0.9 is a completely headerless response and therefore you
2015 can also connect with this to non-HTTP servers and still get a
2016 response since curl will simply transparently downgrade - if al‐
2017 lowed.
2018
2019 Since curl 7.66.0, HTTP/0.9 is disabled by default.
2020
2021 Providing --http0.9 multiple times has no extra effect. Disable
2022 it again with --no-http0.9.
2023
2024 Example:
2025 curl --http0.9 https://example.com
2026
2027 See also --http1.1, --http2 and --http3. Added in 7.64.0.
2028
2029 -0, --http1.0
2030 (HTTP) Tells curl to use HTTP version 1.0 instead of using its
2031 internally preferred HTTP version.
2032
2033 Providing -0, --http1.0 multiple times has no extra effect.
2034
2035 Example:
2036 curl --http1.0 https://example.com
2037
2038 See also --http0.9 and --http1.1. This option is mutually exclu‐
2039 sive to --http1.1 and --http2 and --http2-prior-knowledge and
2040 --http3.
2041
2042 --http1.1
2043 (HTTP) Tells curl to use HTTP version 1.1.
2044
2045 Providing --http1.1 multiple times has no extra effect.
2046
2047 Example:
2048 curl --http1.1 https://example.com
2049
2050 See also -0, --http1.0 and --http0.9. This option is mutually
2051 exclusive to -0, --http1.0 and --http2 and --http2-prior-knowl‐
2052 edge and --http3. Added in 7.33.0.
2053
2054 --http2-prior-knowledge
2055 (HTTP) Tells curl to issue its non-TLS HTTP requests using
2056 HTTP/2 without HTTP/1.1 Upgrade. It requires prior knowledge
2057 that the server supports HTTP/2 straight away. HTTPS requests
2058 will still do HTTP/2 the standard way with negotiated protocol
2059 version in the TLS handshake.
2060
2061 Providing --http2-prior-knowledge multiple times has no extra
2062 effect. Disable it again with --no-http2-prior-knowledge.
2063
2064 Example:
2065 curl --http2-prior-knowledge https://example.com
2066
2067 See also --http2 and --http3. --http2-prior-knowledge requires
2068 that the underlying libcurl was built to support HTTP/2. This
2069 option is mutually exclusive to --http1.1 and -0, --http1.0 and
2070 --http2 and --http3. Added in 7.49.0.
2071
2072 --http2
2073 (HTTP) Tells curl to use HTTP version 2.
2074
2075 For HTTPS, this means curl will attempt to negotiate HTTP/2 in
2076 the TLS handshake. curl does this by default.
2077
2078 For HTTP, this means curl will attempt to upgrade the request to
2079 HTTP/2 using the Upgrade: request header.
2080
2081 When curl uses HTTP/2 over HTTPS, it does not itself insist on
2082 TLS 1.2 or higher even though that is required by the specifica‐
2083 tion. A user can add this version requirement with --tlsv1.2.
2084
2085 Providing --http2 multiple times has no extra effect.
2086
2087 Example:
2088 curl --http2 https://example.com
2089
2090 See also --http1.1, --http3 and --no-alpn. --http2 requires that
2091 the underlying libcurl was built to support HTTP/2. This option
2092 is mutually exclusive to --http1.1 and -0, --http1.0 and
2093 --http2-prior-knowledge and --http3. Added in 7.33.0.
2094
2095 --http3-only
2096 (HTTP) **WARNING**: this option is experimental. Do not use in
2097 production.
2098
2099 Instructs curl to use HTTP/3 to the host in the URL, with no
2100 fallback to earlier HTTP versions. HTTP/3 can only be used for
2101 HTTPS and not for HTTP URLs. For HTTP, this option will trigger
2102 an error.
2103
2104 This option allows a user to avoid using the Alt-Svc method of
2105 upgrading to HTTP/3 when you know that the target speaks HTTP/3
2106 on the given host and port.
2107
2108 This option will make curl fail if a QUIC connection cannot be
2109 established, it will not attempt any other HTTP version on its
2110 own. Use --http3 for similar functionality with a fallback.
2111
2112 Providing --http3-only multiple times has no extra effect.
2113
2114 Example:
2115 curl --http3-only https://example.com
2116
2117 See also --http1.1, --http2 and --http3. --http3-only requires
2118 that the underlying libcurl was built to support HTTP/3. This
2119 option is mutually exclusive to --http1.1 and -0, --http1.0 and
2120 --http2 and --http2-prior-knowledge and --http3. Added in
2121 7.88.0.
2122
2123 --http3
2124 (HTTP) **WARNING**: this option is experimental. Do not use in
2125 production.
2126
2127 Tells curl to try HTTP/3 to the host in the URL, but fallback to
2128 earlier HTTP versions if the HTTP/3 connection establishment
2129 fails. HTTP/3 is only available for HTTPS and not for HTTP URLs.
2130
2131 This option allows a user to avoid using the Alt-Svc method of
2132 upgrading to HTTP/3 when you know that the target speaks HTTP/3
2133 on the given host and port.
2134
2135 When asked to use HTTP/3, curl will issue a separate attempt to
2136 use older HTTP versions with a slight delay, so if the HTTP/3
2137 transfer fails or is very slow, curl will still try to proceed
2138 with an older HTTP version.
2139
2140 Use --http3-only for similar functionality without a fallback.
2141
2142 Providing --http3 multiple times has no extra effect.
2143
2144 Example:
2145 curl --http3 https://example.com
2146
2147 See also --http1.1 and --http2. --http3 requires that the under‐
2148 lying libcurl was built to support HTTP/3. This option is mutu‐
2149 ally exclusive to --http1.1 and -0, --http1.0 and --http2 and
2150 --http2-prior-knowledge and --http3-only. Added in 7.66.0.
2151
2152 --ignore-content-length
2153 (FTP HTTP) For HTTP, Ignore the Content-Length header. This is
2154 particularly useful for servers running Apache 1.x, which will
2155 report incorrect Content-Length for files larger than 2 giga‐
2156 bytes.
2157
2158 For FTP (since 7.46.0), skip the RETR command to figure out the
2159 size before downloading a file.
2160
2161 This option does not work for HTTP if libcurl was built to use
2162 hyper.
2163
2164 Providing --ignore-content-length multiple times has no extra
2165 effect. Disable it again with --no-ignore-content-length.
2166
2167 Example:
2168 curl --ignore-content-length https://example.com
2169
2170 See also --ftp-skip-pasv-ip.
2171
2172 -i, --include
2173 Include the HTTP response headers in the output. The HTTP re‐
2174 sponse headers can include things like server name, cookies,
2175 date of the document, HTTP version and more...
2176
2177 To view the request headers, consider the -v, --verbose option.
2178
2179 Providing -i, --include multiple times has no extra effect.
2180 Disable it again with --no-include.
2181
2182 Example:
2183 curl -i https://example.com
2184
2185 See also -v, --verbose.
2186
2187 -k, --insecure
2188 (TLS SFTP SCP) By default, every secure connection curl makes is
2189 verified to be secure before the transfer takes place. This op‐
2190 tion makes curl skip the verification step and proceed without
2191 checking.
2192
2193 When this option is not used for protocols using TLS, curl veri‐
2194 fies the server's TLS certificate before it continues: that the
2195 certificate contains the right name which matches the host name
2196 used in the URL and that the certificate has been signed by a CA
2197 certificate present in the cert store. See this online resource
2198 for further details:
2199 https://curl.se/docs/sslcerts.html
2200
2201 For SFTP and SCP, this option makes curl skip the known_hosts
2202 verification. known_hosts is a file normally stored in the
2203 user's home directory in the ".ssh" subdirectory, which contains
2204 host names and their public keys.
2205
2206 WARNING: using this option makes the transfer insecure.
2207
2208 When curl uses secure protocols it trusts responses and allows
2209 for example HSTS and Alt-Svc information to be stored and used
2210 subsequently. Using -k, --insecure can make curl trust and use
2211 such information from malicious servers.
2212
2213 Providing -k, --insecure multiple times has no extra effect.
2214 Disable it again with --no-insecure.
2215
2216 Example:
2217 curl --insecure https://example.com
2218
2219 See also --proxy-insecure, --cacert and --capath.
2220
2221 --interface <name>
2222 Perform an operation using a specified interface. You can enter
2223 interface name, IP address or host name. An example could look
2224 like:
2225
2226 curl --interface eth0:1 https://www.example.com/
2227
2228 On Linux it can be used to specify a VRF, but the binary needs
2229 to either have CAP_NET_RAW or to be run as root. More informa‐
2230 tion about Linux VRF: https://www.kernel.org/doc/Documenta‐
2231 tion/networking/vrf.txt
2232
2233 If --interface is provided several times, the last set value
2234 will be used.
2235
2236 Example:
2237 curl --interface eth0 https://example.com
2238
2239 See also --dns-interface.
2240
2241 -4, --ipv4
2242 This option tells curl to use IPv4 addresses only when resolving
2243 host names, and not for example try IPv6.
2244
2245 Providing -4, --ipv4 multiple times has no extra effect.
2246
2247 Example:
2248 curl --ipv4 https://example.com
2249
2250 See also --http1.1 and --http2. This option is mutually exclu‐
2251 sive to -6, --ipv6.
2252
2253 -6, --ipv6
2254 This option tells curl to use IPv6 addresses only when resolving
2255 host names, and not for example try IPv4.
2256
2257 Providing -6, --ipv6 multiple times has no extra effect.
2258
2259 Example:
2260 curl --ipv6 https://example.com
2261
2262 See also --http1.1 and --http2. This option is mutually exclu‐
2263 sive to -4, --ipv4.
2264
2265 --json <data>
2266 (HTTP) Sends the specified JSON data in a POST request to the
2267 HTTP server. --json works as a shortcut for passing on these
2268 three options:
2269
2270 --data [arg]
2271 --header "Content-Type: application/json"
2272 --header "Accept: application/json"
2273
2274 There is no verification that the passed in data is actual JSON
2275 or that the syntax is correct.
2276
2277 If you start the data with the letter @, the rest should be a
2278 file name to read the data from, or a single dash (-) if you
2279 want curl to read the data from stdin. Posting data from a file
2280 named 'foobar' would thus be done with --json @foobar and to in‐
2281 stead read the data from stdin, use --json @-.
2282
2283 If this option is used more than once on the same command line,
2284 the additional data pieces will be concatenated to the previous
2285 before sending.
2286
2287 The headers this option sets can be overridden with -H, --header
2288 as usual.
2289
2290 --json can be used several times in a command line
2291
2292 Examples:
2293 curl --json '{ "drink": "coffe" }' https://example.com
2294 curl --json '{ "drink":' --json ' "coffe" }' https://example.com
2295 curl --json @prepared https://example.com
2296 curl --json @- https://example.com < json.txt
2297
2298 See also --data-binary and --data-raw. This option is mutually
2299 exclusive to -F, --form and -I, --head and -T, --upload-file.
2300 Added in 7.82.0.
2301
2302 -j, --junk-session-cookies
2303 (HTTP) When curl is told to read cookies from a given file, this
2304 option will make it discard all "session cookies". This will ba‐
2305 sically have the same effect as if a new session is started.
2306 Typical browsers always discard session cookies when they are
2307 closed down.
2308
2309 Providing -j, --junk-session-cookies multiple times has no extra
2310 effect. Disable it again with --no-junk-session-cookies.
2311
2312 Example:
2313 curl --junk-session-cookies -b cookies.txt https://example.com
2314
2315 See also -b, --cookie and -c, --cookie-jar.
2316
2317 --keepalive-time <seconds>
2318 This option sets the time a connection needs to remain idle be‐
2319 fore sending keepalive probes and the time between individual
2320 keepalive probes. It is currently effective on operating systems
2321 offering the TCP_KEEPIDLE and TCP_KEEPINTVL socket options
2322 (meaning Linux, recent AIX, HP-UX and more). Keepalives are
2323 used by the TCP stack to detect broken networks on idle connec‐
2324 tions. The number of missed keepalive probes before declaring
2325 the connection down is OS dependent and is commonly 9 or 10.
2326 This option has no effect if --no-keepalive is used.
2327
2328 If unspecified, the option defaults to 60 seconds.
2329
2330 If --keepalive-time is provided several times, the last set
2331 value will be used.
2332
2333 Example:
2334 curl --keepalive-time 20 https://example.com
2335
2336 See also --no-keepalive and -m, --max-time.
2337
2338 --key-type <type>
2339 (TLS) Private key file type. Specify which type your --key pro‐
2340 vided private key is. DER, PEM, and ENG are supported. If not
2341 specified, PEM is assumed.
2342
2343 If --key-type is provided several times, the last set value will
2344 be used.
2345
2346 Example:
2347 curl --key-type DER --key here https://example.com
2348
2349 See also --key.
2350
2351 --key <key>
2352 (TLS SSH) Private key file name. Allows you to provide your pri‐
2353 vate key in this separate file. For SSH, if not specified, curl
2354 tries the following candidates in order: '~/.ssh/id_rsa',
2355 '~/.ssh/id_dsa', './id_rsa', './id_dsa'.
2356
2357 If curl is built against OpenSSL library, and the engine pkcs11
2358 is available, then a PKCS#11 URI (RFC 7512) can be used to spec‐
2359 ify a private key located in a PKCS#11 device. A string begin‐
2360 ning with "pkcs11:" will be interpreted as a PKCS#11 URI. If a
2361 PKCS#11 URI is provided, then the --engine option will be set as
2362 "pkcs11" if none was provided and the --key-type option will be
2363 set as "ENG" if none was provided.
2364
2365 If curl is built against Secure Transport or Schannel then this
2366 option is ignored for TLS protocols (HTTPS, etc). Those backends
2367 expect the private key to be already present in the keychain or
2368 PKCS#12 file containing the certificate.
2369
2370 If --key is provided several times, the last set value will be
2371 used.
2372
2373 Example:
2374 curl --cert certificate --key here https://example.com
2375
2376 See also --key-type and -E, --cert.
2377
2378 --krb <level>
2379 (FTP) Enable Kerberos authentication and use. The level must be
2380 entered and should be one of 'clear', 'safe', 'confidential', or
2381 'private'. Should you use a level that is not one of these,
2382 'private' will instead be used.
2383
2384 If --krb is provided several times, the last set value will be
2385 used.
2386
2387 Example:
2388 curl --krb clear ftp://example.com/
2389
2390 See also --delegation and --ssl. --krb requires that the under‐
2391 lying libcurl was built to support Kerberos.
2392
2393 --libcurl <file>
2394 Append this option to any ordinary curl command line, and you
2395 will get libcurl-using C source code written to the file that
2396 does the equivalent of what your command-line operation does!
2397
2398 This option is global and does not need to be specified for each
2399 use of --next.
2400
2401 If --libcurl is provided several times, the last set value will
2402 be used.
2403
2404 Example:
2405 curl --libcurl client.c https://example.com
2406
2407 See also -v, --verbose.
2408
2409 --limit-rate <speed>
2410 Specify the maximum transfer rate you want curl to use - for
2411 both downloads and uploads. This feature is useful if you have a
2412 limited pipe and you would like your transfer not to use your
2413 entire bandwidth. To make it slower than it otherwise would be.
2414
2415 The given speed is measured in bytes/second, unless a suffix is
2416 appended. Appending 'k' or 'K' will count the number as kilo‐
2417 bytes, 'm' or 'M' makes it megabytes, while 'g' or 'G' makes it
2418 gigabytes. The suffixes (k, M, G, T, P) are 1024 based. For ex‐
2419 ample 1k is 1024. Examples: 200K, 3m and 1G.
2420
2421 The rate limiting logic works on averaging the transfer speed to
2422 no more than the set threshold over a period of multiple sec‐
2423 onds.
2424
2425 If you also use the -Y, --speed-limit option, that option will
2426 take precedence and might cripple the rate-limiting slightly, to
2427 help keeping the speed-limit logic working.
2428
2429 If --limit-rate is provided several times, the last set value
2430 will be used.
2431
2432 Examples:
2433 curl --limit-rate 100K https://example.com
2434 curl --limit-rate 1000 https://example.com
2435 curl --limit-rate 10M https://example.com
2436
2437 See also --rate, -Y, --speed-limit and -y, --speed-time.
2438
2439 -l, --list-only
2440 (FTP POP3) (FTP) When listing an FTP directory, this switch
2441 forces a name-only view. This is especially useful if the user
2442 wants to machine-parse the contents of an FTP directory since
2443 the normal directory view does not use a standard look or for‐
2444 mat. When used like this, the option causes an NLST command to
2445 be sent to the server instead of LIST.
2446
2447 Note: Some FTP servers list only files in their response to
2448 NLST; they do not include sub-directories and symbolic links.
2449
2450 (POP3) When retrieving a specific email from POP3, this switch
2451 forces a LIST command to be performed instead of RETR. This is
2452 particularly useful if the user wants to see if a specific mes‐
2453 sage-id exists on the server and what size it is.
2454
2455 Note: When combined with -X, --request, this option can be used
2456 to send a UIDL command instead, so the user may use the email's
2457 unique identifier rather than its message-id to make the re‐
2458 quest.
2459
2460 Providing -l, --list-only multiple times has no extra effect.
2461 Disable it again with --no-list-only.
2462
2463 Example:
2464 curl --list-only ftp://example.com/dir/
2465
2466 See also -Q, --quote and -X, --request.
2467
2468 --local-port <num/range>
2469 Set a preferred single number or range (FROM-TO) of local port
2470 numbers to use for the connection(s). Note that port numbers by
2471 nature are a scarce resource that will be busy at times so set‐
2472 ting this range to something too narrow might cause unnecessary
2473 connection setup failures.
2474
2475 If --local-port is provided several times, the last set value
2476 will be used.
2477
2478 Example:
2479 curl --local-port 1000-3000 https://example.com
2480
2481 See also -g, --globoff.
2482
2483 --location-trusted
2484 (HTTP) Like -L, --location, but will allow sending the name +
2485 password to all hosts that the site may redirect to. This may or
2486 may not introduce a security breach if the site redirects you to
2487 a site to which you will send your authentication info (which is
2488 plaintext in the case of HTTP Basic authentication).
2489
2490 Providing --location-trusted multiple times has no extra effect.
2491 Disable it again with --no-location-trusted.
2492
2493 Example:
2494 curl --location-trusted -u user:password https://example.com
2495
2496 See also -u, --user.
2497
2498 -L, --location
2499 (HTTP) If the server reports that the requested page has moved
2500 to a different location (indicated with a Location: header and a
2501 3XX response code), this option will make curl redo the request
2502 on the new place. If used together with -i, --include or -I,
2503 --head, headers from all requested pages will be shown. When au‐
2504 thentication is used, curl only sends its credentials to the
2505 initial host. If a redirect takes curl to a different host, it
2506 will not be able to intercept the user+password. See also --lo‐
2507 cation-trusted on how to change this. You can limit the amount
2508 of redirects to follow by using the --max-redirs option.
2509
2510 When curl follows a redirect and if the request is a POST, it
2511 will send the following request with a GET if the HTTP response
2512 was 301, 302, or 303. If the response code was any other 3xx
2513 code, curl will re-send the following request using the same un‐
2514 modified method.
2515
2516 You can tell curl to not change POST requests to GET after a 30x
2517 response by using the dedicated options for that: --post301,
2518 --post302 and --post303.
2519
2520 The method set with -X, --request overrides the method curl
2521 would otherwise select to use.
2522
2523 Providing -L, --location multiple times has no extra effect.
2524 Disable it again with --no-location.
2525
2526 Example:
2527 curl -L https://example.com
2528
2529 See also --resolve and --alt-svc.
2530
2531 --login-options <options>
2532 (IMAP LDAP POP3 SMTP) Specify the login options to use during
2533 server authentication.
2534
2535 You can use login options to specify protocol specific options
2536 that may be used during authentication. At present only IMAP,
2537 POP3 and SMTP support login options. For more information about
2538 login options please see RFC 2384, RFC 5092 and IETF draft
2539 draft-earhart-url-smtp-00.txt
2540
2541 Since 8.2.0, IMAP supports the login option "AUTH=+LOGIN". With
2542 this option, curl uses the plain (not SASL) LOGIN IMAP command
2543 even if the server advertises SASL authentication. Care should
2544 be taken in using this option, as it will send out your password
2545 in plain text. This will not work if the IMAP server disables
2546 the plain LOGIN (e.g. to prevent password snooping).
2547
2548 If --login-options is provided several times, the last set value
2549 will be used.
2550
2551 Example:
2552 curl --login-options 'AUTH=*' imap://example.com
2553
2554 See also -u, --user. Added in 7.34.0.
2555
2556 --mail-auth <address>
2557 (SMTP) Specify a single address. This will be used to specify
2558 the authentication address (identity) of a submitted message
2559 that is being relayed to another server.
2560
2561 If --mail-auth is provided several times, the last set value
2562 will be used.
2563
2564 Example:
2565 curl --mail-auth user@example.come -T mail smtp://example.com/
2566
2567 See also --mail-rcpt and --mail-from.
2568
2569 --mail-from <address>
2570 (SMTP) Specify a single address that the given mail should get
2571 sent from.
2572
2573 If --mail-from is provided several times, the last set value
2574 will be used.
2575
2576 Example:
2577 curl --mail-from user@example.com -T mail smtp://example.com/
2578
2579 See also --mail-rcpt and --mail-auth.
2580
2581 --mail-rcpt-allowfails
2582 (SMTP) When sending data to multiple recipients, by default curl
2583 will abort SMTP conversation if at least one of the recipients
2584 causes RCPT TO command to return an error.
2585
2586 The default behavior can be changed by passing --mail-rcpt-al‐
2587 lowfails command-line option which will make curl ignore errors
2588 and proceed with the remaining valid recipients.
2589
2590 If all recipients trigger RCPT TO failures and this flag is
2591 specified, curl will still abort the SMTP conversation and re‐
2592 turn the error received from to the last RCPT TO command.
2593
2594 Providing --mail-rcpt-allowfails multiple times has no extra ef‐
2595 fect. Disable it again with --no-mail-rcpt-allowfails.
2596
2597 Example:
2598 curl --mail-rcpt-allowfails --mail-rcpt dest@example.com smtp://example.com
2599
2600 See also --mail-rcpt. Added in 7.69.0.
2601
2602 --mail-rcpt <address>
2603 (SMTP) Specify a single email address, user name or mailing list
2604 name. Repeat this option several times to send to multiple re‐
2605 cipients.
2606
2607 When performing an address verification (VRFY command), the re‐
2608 cipient should be specified as the user name or user name and
2609 domain (as per Section 3.5 of RFC 5321). (Added in 7.34.0)
2610
2611 When performing a mailing list expand (EXPN command), the recip‐
2612 ient should be specified using the mailing list name, such as
2613 "Friends" or "London-Office". (Added in 7.34.0)
2614
2615 --mail-rcpt can be used several times in a command line
2616
2617 Example:
2618 curl --mail-rcpt user@example.net smtp://example.com
2619
2620 See also --mail-rcpt-allowfails.
2621
2622 -M, --manual
2623 Manual. Display the huge help text.
2624
2625 Example:
2626 curl --manual
2627
2628 See also -v, --verbose, --libcurl and --trace.
2629
2630 --max-filesize <bytes>
2631 (FTP HTTP MQTT) Specify the maximum size (in bytes) of a file to
2632 download. If the file requested is larger than this value, the
2633 transfer will not start and curl will return with exit code 63.
2634
2635 A size modifier may be used. For example, Appending 'k' or 'K'
2636 will count the number as kilobytes, 'm' or 'M' makes it
2637 megabytes, while 'g' or 'G' makes it gigabytes. Examples: 200K,
2638 3m and 1G. (Added in 7.58.0)
2639
2640 NOTE: The file size is not always known prior to download, and
2641 for such files this option has no effect even if the file trans‐
2642 fer ends up being larger than this given limit. If --max-file‐
2643 size is provided several times, the last set value will be used.
2644
2645 Example:
2646 curl --max-filesize 100K https://example.com
2647
2648 See also --limit-rate.
2649
2650 --max-redirs <num>
2651 (HTTP) Set maximum number of redirections to follow. When -L,
2652 --location is used, to prevent curl from following too many
2653 redirects, by default, the limit is set to 50 redirects. Set
2654 this option to -1 to make it unlimited.
2655
2656 If --max-redirs is provided several times, the last set value
2657 will be used.
2658
2659 Example:
2660 curl --max-redirs 3 --location https://example.com
2661
2662 See also -L, --location.
2663
2664 -m, --max-time <fractional seconds>
2665 Maximum time in seconds that you allow each transfer to take.
2666 This is useful for preventing your batch jobs from hanging for
2667 hours due to slow networks or links going down. Since 7.32.0,
2668 this option accepts decimal values, but the actual timeout will
2669 decrease in accuracy as the specified timeout increases in deci‐
2670 mal precision.
2671
2672 If you enable retrying the transfer (--retry) then the maximum
2673 time counter is reset each time the transfer is retried. You can
2674 use --retry-max-time to limit the retry time.
2675
2676 The decimal value needs to provided using a dot (.) as decimal
2677 separator - not the local version even if it might be using an‐
2678 other separator.
2679
2680 If -m, --max-time is provided several times, the last set value
2681 will be used.
2682
2683 Examples:
2684 curl --max-time 10 https://example.com
2685 curl --max-time 2.92 https://example.com
2686
2687 See also --connect-timeout and --retry-max-time.
2688
2689 --metalink
2690 This option was previously used to specify a metalink resource.
2691 Metalink support has been disabled in curl since 7.78.0 for se‐
2692 curity reasons.
2693
2694 If --metalink is provided several times, the last set value will
2695 be used.
2696
2697 Example:
2698 curl --metalink file https://example.com
2699
2700 See also -Z, --parallel.
2701
2702 --negotiate
2703 (HTTP) Enables Negotiate (SPNEGO) authentication.
2704
2705 This option requires a library built with GSS-API or SSPI sup‐
2706 port. Use -V, --version to see if your curl supports GSS-
2707 API/SSPI or SPNEGO.
2708
2709 When using this option, you must also provide a fake -u, --user
2710 option to activate the authentication code properly. Sending a
2711 '-u :' is enough as the user name and password from the -u,
2712 --user option are not actually used.
2713
2714 If this option is used several times, only the first one is
2715 used.
2716
2717 Providing --negotiate multiple times has no extra effect.
2718
2719 Example:
2720 curl --negotiate -u : https://example.com
2721
2722 See also --basic, --ntlm, --anyauth and --proxy-negotiate.
2723
2724 --netrc-file <filename>
2725 This option is similar to -n, --netrc, except that you provide
2726 the path (absolute or relative) to the netrc file that curl
2727 should use. You can only specify one netrc file per invocation.
2728
2729 It will abide by --netrc-optional if specified.
2730
2731 If --netrc-file is provided several times, the last set value
2732 will be used.
2733
2734 Example:
2735 curl --netrc-file netrc https://example.com
2736
2737 See also -n, --netrc, -u, --user and -K, --config. This option
2738 is mutually exclusive to -n, --netrc.
2739
2740 --netrc-optional
2741 Similar to -n, --netrc, but this option makes the .netrc usage
2742 optional and not mandatory as the -n, --netrc option does.
2743
2744 Providing --netrc-optional multiple times has no extra effect.
2745 Disable it again with --no-netrc-optional.
2746
2747 Example:
2748 curl --netrc-optional https://example.com
2749
2750 See also --netrc-file. This option is mutually exclusive to -n,
2751 --netrc.
2752
2753 -n, --netrc
2754 Makes curl scan the .netrc (_netrc on Windows) file in the
2755 user's home directory for login name and password. This is typi‐
2756 cally used for FTP on Unix. If used with HTTP, curl will enable
2757 user authentication. See netrc(5) and ftp(1) for details on the
2758 file format. Curl will not complain if that file does not have
2759 the right permissions (it should be neither world- nor group-
2760 readable). The environment variable "HOME" is used to find the
2761 home directory.
2762
2763 A quick and simple example of how to setup a .netrc to allow
2764 curl to FTP to the machine host.domain.com with user name 'my‐
2765 self' and password 'secret' could look similar to:
2766
2767 machine host.domain.com
2768 login myself
2769 password secret
2770
2771 Providing -n, --netrc multiple times has no extra effect. Dis‐
2772 able it again with --no-netrc.
2773
2774 Example:
2775 curl --netrc https://example.com
2776
2777 See also --netrc-file, -K, --config and -u, --user. This option
2778 is mutually exclusive to --netrc-file and --netrc-optional.
2779
2780 -:, --next
2781 Tells curl to use a separate operation for the following URL and
2782 associated options. This allows you to send several URL re‐
2783 quests, each with their own specific options, for example, such
2784 as different user names or custom requests for each.
2785
2786 -:, --next will reset all local options and only global ones
2787 will have their values survive over to the operation following
2788 the -:, --next instruction. Global options include -v, --ver‐
2789 bose, --trace, --trace-ascii and --fail-early.
2790
2791 For example, you can do both a GET and a POST in a single com‐
2792 mand line:
2793
2794 curl www1.example.com --next -d postthis www2.example.com
2795
2796 -:, --next can be used several times in a command line
2797
2798 Examples:
2799 curl https://example.com --next -d postthis www2.example.com
2800 curl -I https://example.com --next https://example.net/
2801
2802 See also -Z, --parallel and -K, --config. Added in 7.36.0.
2803
2804 --no-alpn
2805 (HTTPS) Disable the ALPN TLS extension. ALPN is enabled by de‐
2806 fault if libcurl was built with an SSL library that supports
2807 ALPN. ALPN is used by a libcurl that supports HTTP/2 to negoti‐
2808 ate HTTP/2 support with the server during https sessions.
2809
2810 Providing --no-alpn multiple times has no extra effect. Disable
2811 it again with --alpn.
2812
2813 Example:
2814 curl --no-alpn https://example.com
2815
2816 See also --no-npn and --http2. --no-alpn requires that the un‐
2817 derlying libcurl was built to support TLS. Added in 7.36.0.
2818
2819 -N, --no-buffer
2820 Disables the buffering of the output stream. In normal work sit‐
2821 uations, curl will use a standard buffered output stream that
2822 will have the effect that it will output the data in chunks, not
2823 necessarily exactly when the data arrives. Using this option
2824 will disable that buffering.
2825
2826 Providing -N, --no-buffer multiple times has no extra effect.
2827 Disable it again with --buffer.
2828
2829 Example:
2830 curl --no-buffer https://example.com
2831
2832 See also -#, --progress-bar.
2833
2834 --no-clobber
2835 When used in conjunction with the -o, --output, -J, --remote-
2836 header-name, -O, --remote-name, or --remote-name-all options,
2837 curl avoids overwriting files that already exist. Instead, a dot
2838 and a number gets appended to the name of the file that would be
2839 created, up to filename.100 after which it will not create any
2840 file.
2841
2842 Note that this is the negated option name documented. You can
2843 thus use --clobber to enforce the clobbering, even if -J, --re‐
2844 mote-header-name is specified.
2845
2846 Providing --no-clobber multiple times has no extra effect. Dis‐
2847 able it again with --clobber.
2848
2849 Example:
2850 curl --no-clobber --output local/dir/file https://example.com
2851
2852 See also -o, --output and -O, --remote-name. Added in 7.83.0.
2853
2854 --no-keepalive
2855 Disables the use of keepalive messages on the TCP connection.
2856 curl otherwise enables them by default.
2857
2858 Note that this is the negated option name documented. You can
2859 thus use --keepalive to enforce keepalive.
2860
2861 Providing --no-keepalive multiple times has no extra effect.
2862 Disable it again with --keepalive.
2863
2864 Example:
2865 curl --no-keepalive https://example.com
2866
2867 See also --keepalive-time.
2868
2869 --no-npn
2870 (HTTPS) In curl 7.86.0 and later, curl never uses NPN.
2871
2872 Disable the NPN TLS extension. NPN is enabled by default if
2873 libcurl was built with an SSL library that supports NPN. NPN is
2874 used by a libcurl that supports HTTP/2 to negotiate HTTP/2 sup‐
2875 port with the server during https sessions.
2876
2877 Providing --no-npn multiple times has no extra effect. Disable
2878 it again with --npn.
2879
2880 Example:
2881 curl --no-npn https://example.com
2882
2883 See also --no-alpn and --http2. --no-npn requires that the un‐
2884 derlying libcurl was built to support TLS. Added in 7.36.0.
2885
2886 --no-progress-meter
2887 Option to switch off the progress meter output without muting or
2888 otherwise affecting warning and informational messages like -s,
2889 --silent does.
2890
2891 Note that this is the negated option name documented. You can
2892 thus use --progress-meter to enable the progress meter again.
2893
2894 Providing --no-progress-meter multiple times has no extra ef‐
2895 fect. Disable it again with --progress-meter.
2896
2897 Example:
2898 curl --no-progress-meter -o store https://example.com
2899
2900 See also -v, --verbose and -s, --silent. Added in 7.67.0.
2901
2902 --no-sessionid
2903 (TLS) Disable curl's use of SSL session-ID caching. By default
2904 all transfers are done using the cache. Note that while nothing
2905 should ever get hurt by attempting to reuse SSL session-IDs,
2906 there seem to be broken SSL implementations in the wild that may
2907 require you to disable this in order for you to succeed.
2908
2909 Note that this is the negated option name documented. You can
2910 thus use --sessionid to enforce session-ID caching.
2911
2912 Providing --no-sessionid multiple times has no extra effect.
2913 Disable it again with --sessionid.
2914
2915 Example:
2916 curl --no-sessionid https://example.com
2917
2918 See also -k, --insecure.
2919
2920 --noproxy <no-proxy-list>
2921 Comma-separated list of hosts for which not to use a proxy, if
2922 one is specified. The only wildcard is a single * character,
2923 which matches all hosts, and effectively disables the proxy.
2924 Each name in this list is matched as either a domain which con‐
2925 tains the hostname, or the hostname itself. For example, lo‐
2926 cal.com would match local.com, local.com:80, and www.local.com,
2927 but not www.notlocal.com.
2928
2929 Since 7.53.0, This option overrides the environment variables
2930 that disable the proxy ('no_proxy' and 'NO_PROXY'). If there's
2931 an environment variable disabling a proxy, you can set the no‐
2932 proxy list to "" to override it.
2933
2934 Since 7.86.0, IP addresses specified to this option can be pro‐
2935 vided using CIDR notation: an appended slash and number speci‐
2936 fies the number of "network bits" out of the address to use in
2937 the comparison. For example "192.168.0.0/16" would match all ad‐
2938 dresses starting with "192.168".
2939
2940 If --noproxy is provided several times, the last set value will
2941 be used.
2942
2943 Example:
2944 curl --noproxy "www.example" https://example.com
2945
2946 See also -x, --proxy.
2947
2948 --ntlm-wb
2949 (HTTP) Enables NTLM much in the style --ntlm does, but hand over
2950 the authentication to the separate binary ntlmauth application
2951 that is executed when needed.
2952
2953 Providing --ntlm-wb multiple times has no extra effect.
2954
2955 Example:
2956 curl --ntlm-wb -u user:password https://example.com
2957
2958 See also --ntlm and --proxy-ntlm.
2959
2960 --ntlm (HTTP) Enables NTLM authentication. The NTLM authentication
2961 method was designed by Microsoft and is used by IIS web servers.
2962 It is a proprietary protocol, reverse-engineered by clever peo‐
2963 ple and implemented in curl based on their efforts. This kind of
2964 behavior should not be endorsed, you should encourage everyone
2965 who uses NTLM to switch to a public and documented authentica‐
2966 tion method instead, such as Digest.
2967
2968 If you want to enable NTLM for your proxy authentication, then
2969 use --proxy-ntlm.
2970
2971 If this option is used several times, only the first one is
2972 used.
2973
2974 Providing --ntlm multiple times has no extra effect.
2975
2976 Example:
2977 curl --ntlm -u user:password https://example.com
2978
2979 See also --proxy-ntlm. --ntlm requires that the underlying
2980 libcurl was built to support TLS. This option is mutually exclu‐
2981 sive to --basic and --negotiate and --digest and --anyauth.
2982
2983 --oauth2-bearer <token>
2984 (IMAP LDAP POP3 SMTP HTTP) Specify the Bearer Token for OAUTH
2985 2.0 server authentication. The Bearer Token is used in conjunc‐
2986 tion with the user name which can be specified as part of the
2987 --url or -u, --user options.
2988
2989 The Bearer Token and user name are formatted according to RFC
2990 6750.
2991
2992 If --oauth2-bearer is provided several times, the last set value
2993 will be used.
2994
2995 Example:
2996 curl --oauth2-bearer "mF_9.B5f-4.1JqM" https://example.com
2997
2998 See also --basic, --ntlm and --digest. Added in 7.33.0.
2999
3000 --output-dir <dir>
3001 This option specifies the directory in which files should be
3002 stored, when -O, --remote-name or -o, --output are used.
3003
3004 The given output directory is used for all URLs and output op‐
3005 tions on the command line, up until the first -:, --next.
3006
3007 If the specified target directory does not exist, the operation
3008 will fail unless --create-dirs is also used.
3009
3010 If --output-dir is provided several times, the last set value
3011 will be used.
3012
3013 Example:
3014 curl --output-dir "tmp" -O https://example.com
3015
3016 See also -O, --remote-name and -J, --remote-header-name. Added
3017 in 7.73.0.
3018
3019 -o, --output <file>
3020 Write output to <file> instead of stdout. If you are using {} or
3021 [] to fetch multiple documents, you should quote the URL and you
3022 can use '#' followed by a number in the <file> specifier. That
3023 variable will be replaced with the current string for the URL
3024 being fetched. Like in:
3025
3026 curl "http://{one,two}.example.com" -o "file_#1.txt"
3027
3028 or use several variables like:
3029
3030 curl "http://{site,host}.host[1-5].com" -o "#1_#2"
3031
3032 You may use this option as many times as the number of URLs you
3033 have. For example, if you specify two URLs on the same command
3034 line, you can use it like this:
3035
3036 curl -o aa example.com -o bb example.net
3037
3038 and the order of the -o options and the URLs does not matter,
3039 just that the first -o is for the first URL and so on, so the
3040 above command line can also be written as
3041
3042 curl example.com example.net -o aa -o bb
3043
3044 See also the --create-dirs option to create the local directo‐
3045 ries dynamically. Specifying the output as '-' (a single dash)
3046 will force the output to be done to stdout.
3047
3048 To suppress response bodies, you can redirect output to
3049 /dev/null:
3050
3051 curl example.com -o /dev/null
3052
3053 Or for Windows use nul:
3054
3055 curl example.com -o nul
3056
3057 -o, --output can be used several times in a command line
3058
3059 Examples:
3060 curl -o file https://example.com
3061 curl "http://{one,two}.example.com" -o "file_#1.txt"
3062 curl "http://{site,host}.host[1-5].com" -o "#1_#2"
3063 curl -o file https://example.com -o file2 https://example.net
3064
3065 See also -O, --remote-name, --remote-name-all and -J, --remote-
3066 header-name.
3067
3068 --parallel-immediate
3069 When doing parallel transfers, this option will instruct curl
3070 that it should rather prefer opening up more connections in par‐
3071 allel at once rather than waiting to see if new transfers can be
3072 added as multiplexed streams on another connection.
3073
3074 This option is global and does not need to be specified for each
3075 use of --next.
3076
3077 Providing --parallel-immediate multiple times has no extra ef‐
3078 fect. Disable it again with --no-parallel-immediate.
3079
3080 Example:
3081 curl --parallel-immediate -Z https://example.com -o file1 https://example.com -o file2
3082
3083 See also -Z, --parallel and --parallel-max. Added in 7.68.0.
3084
3085 --parallel-max <num>
3086 When asked to do parallel transfers, using -Z, --parallel, this
3087 option controls the maximum amount of transfers to do simultane‐
3088 ously.
3089
3090 This option is global and does not need to be specified for each
3091 use of -:, --next.
3092
3093 The default is 50.
3094
3095 If --parallel-max is provided several times, the last set value
3096 will be used.
3097
3098 Example:
3099 curl --parallel-max 100 -Z https://example.com ftp://example.com/
3100
3101 See also -Z, --parallel. Added in 7.66.0.
3102
3103 -Z, --parallel
3104 Makes curl perform its transfers in parallel as compared to the
3105 regular serial manner.
3106
3107 This option is global and does not need to be specified for each
3108 use of --next.
3109
3110 Providing -Z, --parallel multiple times has no extra effect.
3111 Disable it again with --no-parallel.
3112
3113 Example:
3114 curl --parallel https://example.com -o file1 https://example.com -o file2
3115
3116 See also -:, --next and -v, --verbose. Added in 7.66.0.
3117
3118 --pass <phrase>
3119 (SSH TLS) Passphrase for the private key.
3120
3121 If --pass is provided several times, the last set value will be
3122 used.
3123
3124 Example:
3125 curl --pass secret --key file https://example.com
3126
3127 See also --key and -u, --user.
3128
3129 --path-as-is
3130 Tell curl to not handle sequences of /../ or /./ in the given
3131 URL path. Normally curl will squash or merge them according to
3132 standards but with this option set you tell it not to do that.
3133
3134 Providing --path-as-is multiple times has no extra effect. Dis‐
3135 able it again with --no-path-as-is.
3136
3137 Example:
3138 curl --path-as-is https://example.com/../../etc/passwd
3139
3140 See also --request-target. Added in 7.42.0.
3141
3142 --pinnedpubkey <hashes>
3143 (TLS) Tells curl to use the specified public key file (or
3144 hashes) to verify the peer. This can be a path to a file which
3145 contains a single public key in PEM or DER format, or any number
3146 of base64 encoded sha256 hashes preceded by 'sha256//' and sepa‐
3147 rated by ';'.
3148
3149 When negotiating a TLS or SSL connection, the server sends a
3150 certificate indicating its identity. A public key is extracted
3151 from this certificate and if it does not exactly match the pub‐
3152 lic key provided to this option, curl will abort the connection
3153 before sending or receiving any data.
3154
3155 PEM/DER support:
3156
3157 7.39.0: OpenSSL, GnuTLS and GSKit
3158
3159 7.43.0: NSS and wolfSSL
3160
3161 7.47.0: mbedtls
3162
3163 sha256 support:
3164
3165 7.44.0: OpenSSL, GnuTLS, NSS and wolfSSL
3166
3167 7.47.0: mbedtls
3168
3169 Other SSL backends not supported.
3170
3171 If --pinnedpubkey is provided several times, the last set value
3172 will be used.
3173
3174 Examples:
3175 curl --pinnedpubkey keyfile https://example.com
3176 curl --pinnedpubkey 'sha256//ce118b51897f4452dc' https://example.com
3177
3178 See also --hostpubsha256. Added in 7.39.0.
3179
3180 --post301
3181 (HTTP) Tells curl to respect RFC 7231/6.4.2 and not convert POST
3182 requests into GET requests when following a 301 redirection. The
3183 non-RFC behavior is ubiquitous in web browsers, so curl does the
3184 conversion by default to maintain consistency. However, a server
3185 may require a POST to remain a POST after such a redirection.
3186 This option is meaningful only when using -L, --location.
3187
3188 Providing --post301 multiple times has no extra effect. Disable
3189 it again with --no-post301.
3190
3191 Example:
3192 curl --post301 --location -d "data" https://example.com
3193
3194 See also --post302, --post303 and -L, --location.
3195
3196 --post302
3197 (HTTP) Tells curl to respect RFC 7231/6.4.3 and not convert POST
3198 requests into GET requests when following a 302 redirection. The
3199 non-RFC behavior is ubiquitous in web browsers, so curl does the
3200 conversion by default to maintain consistency. However, a server
3201 may require a POST to remain a POST after such a redirection.
3202 This option is meaningful only when using -L, --location.
3203
3204 Providing --post302 multiple times has no extra effect. Disable
3205 it again with --no-post302.
3206
3207 Example:
3208 curl --post302 --location -d "data" https://example.com
3209
3210 See also --post301, --post303 and -L, --location.
3211
3212 --post303
3213 (HTTP) Tells curl to violate RFC 7231/6.4.4 and not convert POST
3214 requests into GET requests when following 303 redirections. A
3215 server may require a POST to remain a POST after a 303 redirect‐
3216 ion. This option is meaningful only when using -L, --location.
3217
3218 Providing --post303 multiple times has no extra effect. Disable
3219 it again with --no-post303.
3220
3221 Example:
3222 curl --post303 --location -d "data" https://example.com
3223
3224 See also --post302, --post301 and -L, --location.
3225
3226 --preproxy [protocol://]host[:port]
3227 Use the specified SOCKS proxy before connecting to an HTTP or
3228 HTTPS -x, --proxy. In such a case curl first connects to the
3229 SOCKS proxy and then connects (through SOCKS) to the HTTP or
3230 HTTPS proxy. Hence pre proxy.
3231
3232 The pre proxy string should be specified with a protocol:// pre‐
3233 fix to specify alternative proxy protocols. Use socks4://,
3234 socks4a://, socks5:// or socks5h:// to request the specific
3235 SOCKS version to be used. No protocol specified will make curl
3236 default to SOCKS4.
3237
3238 If the port number is not specified in the proxy string, it is
3239 assumed to be 1080.
3240
3241 User and password that might be provided in the proxy string are
3242 URL decoded by curl. This allows you to pass in special charac‐
3243 ters such as @ by using %40 or pass in a colon with %3a.
3244
3245 If --preproxy is provided several times, the last set value will
3246 be used.
3247
3248 Example:
3249 curl --preproxy socks5://proxy.example -x http://http.example https://example.com
3250
3251 See also -x, --proxy and --socks5. Added in 7.52.0.
3252
3253 -#, --progress-bar
3254 Make curl display transfer progress as a simple progress bar in‐
3255 stead of the standard, more informational, meter.
3256
3257 This progress bar draws a single line of '#' characters across
3258 the screen and shows a percentage if the transfer size is known.
3259 For transfers without a known size, there will be space ship
3260 (-=o=-) that moves back and forth but only while data is being
3261 transferred, with a set of flying hash sign symbols on top.
3262
3263 This option is global and does not need to be specified for each
3264 use of --next.
3265
3266 Providing -#, --progress-bar multiple times has no extra effect.
3267 Disable it again with --no-progress-bar.
3268
3269 Example:
3270 curl -# -O https://example.com
3271
3272 See also --styled-output.
3273
3274 --proto-default <protocol>
3275 Tells curl to use protocol for any URL missing a scheme name.
3276
3277 An unknown or unsupported protocol causes error CURLE_UNSUP‐
3278 PORTED_PROTOCOL (1).
3279
3280 This option does not change the default proxy protocol (http).
3281
3282 Without this option set, curl guesses protocol based on the host
3283 name, see --url for details.
3284
3285 If --proto-default is provided several times, the last set value
3286 will be used.
3287
3288 Example:
3289 curl --proto-default https ftp.example.com
3290
3291 See also --proto and --proto-redir. Added in 7.45.0.
3292
3293 --proto-redir <protocols>
3294 Tells curl to limit what protocols it may use on redirect. Pro‐
3295 tocols denied by --proto are not overridden by this option. See
3296 --proto for how protocols are represented.
3297
3298 Example, allow only HTTP and HTTPS on redirect:
3299
3300 curl --proto-redir -all,http,https http://example.com
3301
3302 By default curl will only allow HTTP, HTTPS, FTP and FTPS on re‐
3303 direct (since 7.65.2). Specifying all or +all enables all proto‐
3304 cols on redirects, which is not good for security.
3305
3306 If --proto-redir is provided several times, the last set value
3307 will be used.
3308
3309 Example:
3310 curl --proto-redir =http,https https://example.com
3311
3312 See also --proto.
3313
3314 --proto <protocols>
3315 Tells curl to limit what protocols it may use for transfers.
3316 Protocols are evaluated left to right, are comma separated, and
3317 are each a protocol name or 'all', optionally prefixed by zero
3318 or more modifiers. Available modifiers are:
3319
3320 + Permit this protocol in addition to protocols already permit‐
3321 ted (this is the default if no modifier is used).
3322
3323 - Deny this protocol, removing it from the list of protocols
3324 already permitted.
3325
3326 = Permit only this protocol (ignoring the list already permit‐
3327 ted), though subject to later modification by subsequent en‐
3328 tries in the comma separated list.
3329
3330 For example:
3331
3332 --proto -ftps uses the default protocols, but disables ftps
3333
3334 --proto -all,https,+http
3335 only enables http and https
3336
3337 --proto =http,https
3338 also only enables http and https
3339
3340 Unknown and disabled protocols produce a warning. This allows
3341 scripts to safely rely on being able to disable potentially dan‐
3342 gerous protocols, without relying upon support for that protocol
3343 being built into curl to avoid an error.
3344
3345 This option can be used multiple times, in which case the effect
3346 is the same as concatenating the protocols into one instance of
3347 the option.
3348
3349 If --proto is provided several times, the last set value will be
3350 used.
3351
3352 Example:
3353 curl --proto =http,https,sftp https://example.com
3354
3355 See also --proto-redir and --proto-default.
3356
3357 --proxy-anyauth
3358 Tells curl to pick a suitable authentication method when commu‐
3359 nicating with the given HTTP proxy. This might cause an extra
3360 request/response round-trip.
3361
3362 Providing --proxy-anyauth multiple times has no extra effect.
3363
3364 Example:
3365 curl --proxy-anyauth --proxy-user user:passwd -x proxy https://example.com
3366
3367 See also -x, --proxy, --proxy-basic and --proxy-digest.
3368
3369 --proxy-basic
3370 Tells curl to use HTTP Basic authentication when communicating
3371 with the given proxy. Use --basic for enabling HTTP Basic with a
3372 remote host. Basic is the default authentication method curl
3373 uses with proxies.
3374
3375 Providing --proxy-basic multiple times has no extra effect.
3376
3377 Example:
3378 curl --proxy-basic --proxy-user user:passwd -x proxy https://example.com
3379
3380 See also -x, --proxy, --proxy-anyauth and --proxy-digest.
3381
3382 --proxy-ca-native
3383 (TLS) Tells curl to use the CA store from the native operating
3384 system to verify the HTTPS proxy. By default, curl will other‐
3385 wise use a CA store provided in a single file or directory, but
3386 when using this option it will interface the operating system's
3387 own vault.
3388
3389 This option only works for curl on Windows when built to use
3390 OpenSSL. When curl on Windows is built to use Schannel, this
3391 feature is implied and curl then only uses the native CA store.
3392
3393 Providing --proxy-ca-native multiple times has no extra effect.
3394 Disable it again with --no-proxy-ca-native.
3395
3396 Example:
3397 curl --ca-native https://example.com
3398
3399 See also --cacert, --capath and -k, --insecure. Added in 8.2.0.
3400
3401 --proxy-cacert <file>
3402 Same as --cacert but used in HTTPS proxy context.
3403
3404 If --proxy-cacert is provided several times, the last set value
3405 will be used.
3406
3407 Example:
3408 curl --proxy-cacert CA-file.txt -x https://proxy https://example.com
3409
3410 See also --proxy-capath, --cacert, --capath and -x, --proxy.
3411 Added in 7.52.0.
3412
3413 --proxy-capath <dir>
3414 Same as --capath but used in HTTPS proxy context.
3415
3416 If --proxy-capath is provided several times, the last set value
3417 will be used.
3418
3419 Example:
3420 curl --proxy-capath /local/directory -x https://proxy https://example.com
3421
3422 See also --proxy-cacert, -x, --proxy and --capath. Added in
3423 7.52.0.
3424
3425 --proxy-cert-type <type>
3426 Same as --cert-type but used in HTTPS proxy context.
3427
3428 If --proxy-cert-type is provided several times, the last set
3429 value will be used.
3430
3431 Example:
3432 curl --proxy-cert-type PEM --proxy-cert file -x https://proxy https://example.com
3433
3434 See also --proxy-cert. Added in 7.52.0.
3435
3436 --proxy-cert <cert[:passwd]>
3437 Same as -E, --cert but used in HTTPS proxy context.
3438
3439 If --proxy-cert is provided several times, the last set value
3440 will be used.
3441
3442 Example:
3443 curl --proxy-cert file -x https://proxy https://example.com
3444
3445 See also --proxy-cert-type. Added in 7.52.0.
3446
3447 --proxy-ciphers <list>
3448 Same as --ciphers but used in HTTPS proxy context.
3449
3450 Specifies which ciphers to use in the connection to the HTTPS
3451 proxy. The list of ciphers must specify valid ciphers. Read up
3452 on SSL cipher list details on this URL:
3453
3454 https://curl.se/docs/ssl-ciphers.html
3455
3456 If --proxy-ciphers is provided several times, the last set value
3457 will be used.
3458
3459 Example:
3460 curl --proxy-ciphers ECDHE-ECDSA-AES256-CCM8 -x https://proxy https://example.com
3461
3462 See also --ciphers, --curves and -x, --proxy. Added in 7.52.0.
3463
3464 --proxy-crlfile <file>
3465 Same as --crlfile but used in HTTPS proxy context.
3466
3467 If --proxy-crlfile is provided several times, the last set value
3468 will be used.
3469
3470 Example:
3471 curl --proxy-crlfile rejects.txt -x https://proxy https://example.com
3472
3473 See also --crlfile and -x, --proxy. Added in 7.52.0.
3474
3475 --proxy-digest
3476 Tells curl to use HTTP Digest authentication when communicating
3477 with the given proxy. Use --digest for enabling HTTP Digest with
3478 a remote host.
3479
3480 Providing --proxy-digest multiple times has no extra effect.
3481
3482 Example:
3483 curl --proxy-digest --proxy-user user:passwd -x proxy https://example.com
3484
3485 See also -x, --proxy, --proxy-anyauth and --proxy-basic.
3486
3487 --proxy-header <header/@file>
3488 (HTTP) Extra header to include in the request when sending HTTP
3489 to a proxy. You may specify any number of extra headers. This is
3490 the equivalent option to -H, --header but is for proxy communi‐
3491 cation only like in CONNECT requests when you want a separate
3492 header sent to the proxy to what is sent to the actual remote
3493 host.
3494
3495 curl will make sure that each header you add/replace is sent
3496 with the proper end-of-line marker, you should thus not add that
3497 as a part of the header content: do not add newlines or carriage
3498 returns, they will only mess things up for you.
3499
3500 Headers specified with this option will not be included in re‐
3501 quests that curl knows will not be sent to a proxy.
3502
3503 Starting in 7.55.0, this option can take an argument in @file‐
3504 name style, which then adds a header for each line in the input
3505 file. Using @- will make curl read the header file from stdin.
3506
3507 This option can be used multiple times to add/replace/remove
3508 multiple headers.
3509
3510 --proxy-header can be used several times in a command line
3511
3512 Examples:
3513 curl --proxy-header "X-First-Name: Joe" -x http://proxy https://example.com
3514 curl --proxy-header "User-Agent: surprise" -x http://proxy https://example.com
3515 curl --proxy-header "Host:" -x http://proxy https://example.com
3516
3517 See also -x, --proxy. Added in 7.37.0.
3518
3519 --proxy-http2
3520 (HTTP) Tells curl to try negotiate HTTP version 2 with an HTTPS
3521 proxy. The proxy might still only offer HTTP/1 and then curl
3522 will stick to using that version.
3523
3524 This has no effect for any other kinds of proxies.
3525
3526 Providing --proxy-http2 multiple times has no extra effect.
3527 Disable it again with --no-proxy-http2.
3528
3529 Example:
3530 curl --proxy-http2 -x proxy https://example.com
3531
3532 See also -x, --proxy. --proxy-http2 requires that the underlying
3533 libcurl was built to support HTTP/2. Added in 8.1.0.
3534
3535 --proxy-insecure
3536 Same as -k, --insecure but used in HTTPS proxy context.
3537
3538 Providing --proxy-insecure multiple times has no extra effect.
3539 Disable it again with --no-proxy-insecure.
3540
3541 Example:
3542 curl --proxy-insecure -x https://proxy https://example.com
3543
3544 See also -x, --proxy and -k, --insecure. Added in 7.52.0.
3545
3546 --proxy-key-type <type>
3547 Same as --key-type but used in HTTPS proxy context.
3548
3549 If --proxy-key-type is provided several times, the last set
3550 value will be used.
3551
3552 Example:
3553 curl --proxy-key-type DER --proxy-key here -x https://proxy https://example.com
3554
3555 See also --proxy-key and -x, --proxy. Added in 7.52.0.
3556
3557 --proxy-key <key>
3558 Same as --key but used in HTTPS proxy context.
3559
3560 If --proxy-key is provided several times, the last set value
3561 will be used.
3562
3563 Example:
3564 curl --proxy-key here -x https://proxy https://example.com
3565
3566 See also --proxy-key-type and -x, --proxy. Added in 7.52.0.
3567
3568 --proxy-negotiate
3569 Tells curl to use HTTP Negotiate (SPNEGO) authentication when
3570 communicating with the given proxy. Use --negotiate for enabling
3571 HTTP Negotiate (SPNEGO) with a remote host.
3572
3573 Providing --proxy-negotiate multiple times has no extra effect.
3574
3575 Example:
3576 curl --proxy-negotiate --proxy-user user:passwd -x proxy https://example.com
3577
3578 See also --proxy-anyauth and --proxy-basic.
3579
3580 --proxy-ntlm
3581 Tells curl to use HTTP NTLM authentication when communicating
3582 with the given proxy. Use --ntlm for enabling NTLM with a remote
3583 host.
3584
3585 Providing --proxy-ntlm multiple times has no extra effect.
3586
3587 Example:
3588 curl --proxy-ntlm --proxy-user user:passwd -x http://proxy https://example.com
3589
3590 See also --proxy-negotiate and --proxy-anyauth.
3591
3592 --proxy-pass <phrase>
3593 Same as --pass but used in HTTPS proxy context.
3594
3595 If --proxy-pass is provided several times, the last set value
3596 will be used.
3597
3598 Example:
3599 curl --proxy-pass secret --proxy-key here -x https://proxy https://example.com
3600
3601 See also -x, --proxy and --proxy-key. Added in 7.52.0.
3602
3603 --proxy-pinnedpubkey <hashes>
3604 (TLS) Tells curl to use the specified public key file (or
3605 hashes) to verify the proxy. This can be a path to a file which
3606 contains a single public key in PEM or DER format, or any number
3607 of base64 encoded sha256 hashes preceded by 'sha256//' and sepa‐
3608 rated by ';'.
3609
3610 When negotiating a TLS or SSL connection, the server sends a
3611 certificate indicating its identity. A public key is extracted
3612 from this certificate and if it does not exactly match the pub‐
3613 lic key provided to this option, curl will abort the connection
3614 before sending or receiving any data.
3615
3616 If --proxy-pinnedpubkey is provided several times, the last set
3617 value will be used.
3618
3619 Examples:
3620 curl --proxy-pinnedpubkey keyfile https://example.com
3621 curl --proxy-pinnedpubkey 'sha256//ce118b51897f4452dc' https://example.com
3622
3623 See also --pinnedpubkey and -x, --proxy. Added in 7.59.0.
3624
3625 --proxy-service-name <name>
3626 This option allows you to change the service name for proxy ne‐
3627 gotiation.
3628
3629 If --proxy-service-name is provided several times, the last set
3630 value will be used.
3631
3632 Example:
3633 curl --proxy-service-name "shrubbery" -x proxy https://example.com
3634
3635 See also --service-name and -x, --proxy. Added in 7.43.0.
3636
3637 --proxy-ssl-allow-beast
3638 Same as --ssl-allow-beast but used in HTTPS proxy context.
3639
3640 Providing --proxy-ssl-allow-beast multiple times has no extra
3641 effect. Disable it again with --no-proxy-ssl-allow-beast.
3642
3643 Example:
3644 curl --proxy-ssl-allow-beast -x https://proxy https://example.com
3645
3646 See also --ssl-allow-beast and -x, --proxy. Added in 7.52.0.
3647
3648 --proxy-ssl-auto-client-cert
3649 Same as --ssl-auto-client-cert but used in HTTPS proxy context.
3650
3651 Providing --proxy-ssl-auto-client-cert multiple times has no ex‐
3652 tra effect. Disable it again with --no-proxy-ssl-auto-client-
3653 cert.
3654
3655 Example:
3656 curl --proxy-ssl-auto-client-cert -x https://proxy https://example.com
3657
3658 See also --ssl-auto-client-cert and -x, --proxy. Added in
3659 7.77.0.
3660
3661 --proxy-tls13-ciphers <ciphersuite list>
3662 (TLS) Specifies which cipher suites to use in the connection to
3663 your HTTPS proxy when it negotiates TLS 1.3. The list of ciphers
3664 suites must specify valid ciphers. Read up on TLS 1.3 cipher
3665 suite details on this URL:
3666
3667 https://curl.se/docs/ssl-ciphers.html
3668
3669 This option is currently used only when curl is built to use
3670 OpenSSL 1.1.1 or later. If you are using a different SSL backend
3671 you can try setting TLS 1.3 cipher suites by using the --proxy-
3672 ciphers option.
3673
3674 If --proxy-tls13-ciphers is provided several times, the last set
3675 value will be used.
3676
3677 Example:
3678 curl --proxy-tls13-ciphers TLS_AES_128_GCM_SHA256 -x proxy https://example.com
3679
3680 See also --tls13-ciphers, --curves and --proxy-ciphers. Added in
3681 7.61.0.
3682
3683 --proxy-tlsauthtype <type>
3684 Same as --tlsauthtype but used in HTTPS proxy context.
3685
3686 If --proxy-tlsauthtype is provided several times, the last set
3687 value will be used.
3688
3689 Example:
3690 curl --proxy-tlsauthtype SRP -x https://proxy https://example.com
3691
3692 See also -x, --proxy and --proxy-tlsuser. Added in 7.52.0.
3693
3694 --proxy-tlspassword <string>
3695 Same as --tlspassword but used in HTTPS proxy context.
3696
3697 If --proxy-tlspassword is provided several times, the last set
3698 value will be used.
3699
3700 Example:
3701 curl --proxy-tlspassword passwd -x https://proxy https://example.com
3702
3703 See also -x, --proxy and --proxy-tlsuser. Added in 7.52.0.
3704
3705 --proxy-tlsuser <name>
3706 Same as --tlsuser but used in HTTPS proxy context.
3707
3708 If --proxy-tlsuser is provided several times, the last set value
3709 will be used.
3710
3711 Example:
3712 curl --proxy-tlsuser smith -x https://proxy https://example.com
3713
3714 See also -x, --proxy and --proxy-tlspassword. Added in 7.52.0.
3715
3716 --proxy-tlsv1
3717 Same as -1, --tlsv1 but used in HTTPS proxy context.
3718
3719 Providing --proxy-tlsv1 multiple times has no extra effect.
3720
3721 Example:
3722 curl --proxy-tlsv1 -x https://proxy https://example.com
3723
3724 See also -x, --proxy. Added in 7.52.0.
3725
3726 -U, --proxy-user <user:password>
3727 Specify the user name and password to use for proxy authentica‐
3728 tion.
3729
3730 If you use a Windows SSPI-enabled curl binary and do either Ne‐
3731 gotiate or NTLM authentication then you can tell curl to select
3732 the user name and password from your environment by specifying a
3733 single colon with this option: "-U :".
3734
3735 On systems where it works, curl will hide the given option argu‐
3736 ment from process listings. This is not enough to protect cre‐
3737 dentials from possibly getting seen by other users on the same
3738 system as they will still be visible for a moment before
3739 cleared. Such sensitive data should be retrieved from a file in‐
3740 stead or similar and never used in clear text in a command line.
3741
3742 If -U, --proxy-user is provided several times, the last set
3743 value will be used.
3744
3745 Example:
3746 curl --proxy-user name:pwd -x proxy https://example.com
3747
3748 See also --proxy-pass.
3749
3750 -x, --proxy [protocol://]host[:port]
3751 Use the specified proxy.
3752
3753 The proxy string can be specified with a protocol:// prefix. No
3754 protocol specified or http:// will be treated as HTTP proxy. Use
3755 socks4://, socks4a://, socks5:// or socks5h:// to request a spe‐
3756 cific SOCKS version to be used.
3757
3758
3759 Unix domain sockets are supported for socks proxy. Set localhost
3760 for the host part. e.g. socks5h://localhost/path/to/socket.sock
3761
3762 HTTPS proxy support via https:// protocol prefix was added in
3763 7.52.0 for OpenSSL, GnuTLS and NSS. Since 7.87.0, it also works
3764 for BearSSL, mbedTLS, rustls, Schannel, Secure Transport and
3765 wolfSSL.
3766
3767 Unrecognized and unsupported proxy protocols cause an error
3768 since 7.52.0. Prior versions may ignore the protocol and use
3769 http:// instead.
3770
3771 If the port number is not specified in the proxy string, it is
3772 assumed to be 1080.
3773
3774 This option overrides existing environment variables that set
3775 the proxy to use. If there's an environment variable setting a
3776 proxy, you can set proxy to "" to override it.
3777
3778 All operations that are performed over an HTTP proxy will trans‐
3779 parently be converted to HTTP. It means that certain protocol
3780 specific operations might not be available. This is not the case
3781 if you can tunnel through the proxy, as one with the -p, --prox‐
3782 ytunnel option.
3783
3784 User and password that might be provided in the proxy string are
3785 URL decoded by curl. This allows you to pass in special charac‐
3786 ters such as @ by using %40 or pass in a colon with %3a.
3787
3788 The proxy host can be specified the same way as the proxy envi‐
3789 ronment variables, including the protocol prefix (http://) and
3790 the embedded user + password.
3791
3792 When a proxy is used, the active FTP mode as set with -P, --ftp-
3793 port, cannot be used.
3794
3795 If -x, --proxy is provided several times, the last set value
3796 will be used.
3797
3798 Example:
3799 curl --proxy http://proxy.example https://example.com
3800
3801 See also --socks5 and --proxy-basic.
3802
3803 --proxy1.0 <host[:port]>
3804 Use the specified HTTP 1.0 proxy. If the port number is not
3805 specified, it is assumed at port 1080.
3806
3807 The only difference between this and the HTTP proxy option -x,
3808 --proxy, is that attempts to use CONNECT through the proxy will
3809 specify an HTTP 1.0 protocol instead of the default HTTP 1.1.
3810
3811 Providing --proxy1.0 multiple times has no extra effect.
3812
3813 Example:
3814 curl --proxy1.0 -x http://proxy https://example.com
3815
3816 See also -x, --proxy, --socks5 and --preproxy.
3817
3818 -p, --proxytunnel
3819 When an HTTP proxy is used -x, --proxy, this option will make
3820 curl tunnel through the proxy. The tunnel approach is made with
3821 the HTTP proxy CONNECT request and requires that the proxy al‐
3822 lows direct connect to the remote port number curl wants to tun‐
3823 nel through to.
3824
3825 To suppress proxy CONNECT response headers when curl is set to
3826 output headers use --suppress-connect-headers.
3827
3828 Providing -p, --proxytunnel multiple times has no extra effect.
3829 Disable it again with --no-proxytunnel.
3830
3831 Example:
3832 curl --proxytunnel -x http://proxy https://example.com
3833
3834 See also -x, --proxy.
3835
3836 --pubkey <key>
3837 (SFTP SCP) Public key file name. Allows you to provide your pub‐
3838 lic key in this separate file.
3839
3840 (As of 7.39.0, curl attempts to automatically extract the public
3841 key from the private key file, so passing this option is gener‐
3842 ally not required. Note that this public key extraction requires
3843 libcurl to be linked against a copy of libssh2 1.2.8 or higher
3844 that is itself linked against OpenSSL.)
3845
3846 If --pubkey is provided several times, the last set value will
3847 be used.
3848
3849 Example:
3850 curl --pubkey file.pub sftp://example.com/
3851
3852 See also --pass.
3853
3854 -Q, --quote <command>
3855 (FTP SFTP) Send an arbitrary command to the remote FTP or SFTP
3856 server. Quote commands are sent BEFORE the transfer takes place
3857 (just after the initial PWD command in an FTP transfer, to be
3858 exact). To make commands take place after a successful transfer,
3859 prefix them with a dash '-'.
3860
3861 (FTP only) To make commands be sent after curl has changed the
3862 working directory, just before the file transfer command(s),
3863 prefix the command with a '+'. This is not performed when a di‐
3864 rectory listing is performed.
3865
3866 You may specify any number of commands.
3867
3868 By default curl will stop at first failure. To make curl con‐
3869 tinue even if the command fails, prefix the command with an as‐
3870 terisk (*). Otherwise, if the server returns failure for one of
3871 the commands, the entire operation will be aborted.
3872
3873 You must send syntactically correct FTP commands as RFC 959 de‐
3874 fines to FTP servers, or one of the commands listed below to
3875 SFTP servers.
3876
3877 SFTP is a binary protocol. Unlike for FTP, curl interprets SFTP
3878 quote commands itself before sending them to the server. File
3879 names may be quoted shell-style to embed spaces or special char‐
3880 acters. Following is the list of all supported SFTP quote com‐
3881 mands:
3882
3883 atime date file
3884 The atime command sets the last access time of the file
3885 named by the file operand. The <date expression> can be
3886 all sorts of date strings, see the curl_getdate(3) man
3887 page for date expression details. (Added in 7.73.0)
3888
3889 chgrp group file
3890 The chgrp command sets the group ID of the file named by
3891 the file operand to the group ID specified by the group
3892 operand. The group operand is a decimal integer group ID.
3893
3894 chmod mode file
3895 The chmod command modifies the file mode bits of the
3896 specified file. The mode operand is an octal integer mode
3897 number.
3898
3899 chown user file
3900 The chown command sets the owner of the file named by the
3901 file operand to the user ID specified by the user oper‐
3902 and. The user operand is a decimal integer user ID.
3903
3904 ln source_file target_file
3905 The ln and symlink commands create a symbolic link at the
3906 target_file location pointing to the source_file loca‐
3907 tion.
3908
3909 mkdir directory_name
3910 The mkdir command creates the directory named by the di‐
3911 rectory_name operand.
3912
3913 mtime date file
3914 The mtime command sets the last modification time of the
3915 file named by the file operand. The <date expression> can
3916 be all sorts of date strings, see the curl_getdate(3) man
3917 page for date expression details. (Added in 7.73.0)
3918
3919 pwd The pwd command returns the absolute pathname of the cur‐
3920 rent working directory.
3921
3922 rename source target
3923 The rename command renames the file or directory named by
3924 the source operand to the destination path named by the
3925 target operand.
3926
3927 rm file
3928 The rm command removes the file specified by the file op‐
3929 erand.
3930
3931 rmdir directory
3932 The rmdir command removes the directory entry specified
3933 by the directory operand, provided it is empty.
3934
3935 symlink source_file target_file
3936 See ln.
3937
3938 -Q, --quote can be used several times in a command line
3939
3940 Example:
3941 curl --quote "DELE file" ftp://example.com/foo
3942
3943 See also -X, --request.
3944
3945 --random-file <file>
3946 Deprecated option. This option is ignored by curl since 7.84.0.
3947 Prior to that it only had an effect on curl if built to use old
3948 versions of OpenSSL.
3949
3950 Specify the path name to file containing what will be considered
3951 as random data. The data may be used to seed the random engine
3952 for SSL connections.
3953
3954 If --random-file is provided several times, the last set value
3955 will be used.
3956
3957 Example:
3958 curl --random-file rubbish https://example.com
3959
3960 See also --egd-file.
3961
3962 -r, --range <range>
3963 (HTTP FTP SFTP FILE) Retrieve a byte range (i.e. a partial docu‐
3964 ment) from an HTTP/1.1, FTP or SFTP server or a local FILE.
3965 Ranges can be specified in a number of ways.
3966
3967 0-499 specifies the first 500 bytes
3968
3969 500-999 specifies the second 500 bytes
3970
3971 -500 specifies the last 500 bytes
3972
3973 9500- specifies the bytes from offset 9500 and forward
3974
3975 0-0,-1 specifies the first and last byte only(*)(HTTP)
3976
3977 100-199,500-599
3978 specifies two separate 100-byte ranges(*) (HTTP)
3979
3980 (*) = NOTE that this will cause the server to reply with a mul‐
3981 tipart response, which will be returned as-is by curl! Parsing
3982 or otherwise transforming this response is the responsibility of
3983 the caller.
3984
3985 Only digit characters (0-9) are valid in the 'start' and 'stop'
3986 fields of the 'start-stop' range syntax. If a non-digit charac‐
3987 ter is given in the range, the server's response will be unspec‐
3988 ified, depending on the server's configuration.
3989
3990 You should also be aware that many HTTP/1.1 servers do not have
3991 this feature enabled, so that when you attempt to get a range,
3992 you will instead get the whole document.
3993
3994 FTP and SFTP range downloads only support the simple 'start-
3995 stop' syntax (optionally with one of the numbers omitted). FTP
3996 use depends on the extended FTP command SIZE.
3997
3998 If -r, --range is provided several times, the last set value
3999 will be used.
4000
4001 Example:
4002 curl --range 22-44 https://example.com
4003
4004 See also -C, --continue-at and -a, --append.
4005
4006 --rate <max request rate>
4007 Specify the maximum transfer frequency you allow curl to use -
4008 in number of transfer starts per time unit (sometimes called re‐
4009 quest rate). Without this option, curl will start the next
4010 transfer as fast as possible.
4011
4012 If given several URLs and a transfer completes faster than the
4013 allowed rate, curl will wait until the next transfer is started
4014 to maintain the requested rate. This option has no effect when
4015 -Z, --parallel is used.
4016
4017 The request rate is provided as "N/U" where N is an integer num‐
4018 ber and U is a time unit. Supported units are 's' (second), 'm'
4019 (minute), 'h' (hour) and 'd' /(day, as in a 24 hour unit). The
4020 default time unit, if no "/U" is provided, is number of trans‐
4021 fers per hour.
4022
4023 If curl is told to allow 10 requests per minute, it will not
4024 start the next request until 6 seconds have elapsed since the
4025 previous transfer was started.
4026
4027 This function uses millisecond resolution. If the allowed fre‐
4028 quency is set more than 1000 per second, it will instead run un‐
4029 restricted.
4030
4031 When retrying transfers, enabled with --retry, the separate
4032 retry delay logic is used and not this setting.
4033
4034 This option is global and does not need to be specified for each
4035 use of --next.
4036
4037 If --rate is provided several times, the last set value will be
4038 used.
4039
4040 Examples:
4041 curl --rate 2/s https://example.com ...
4042 curl --rate 3/h https://example.com ...
4043 curl --rate 14/m https://example.com ...
4044
4045 See also --limit-rate and --retry-delay. Added in 7.84.0.
4046
4047 --raw (HTTP) When used, it disables all internal HTTP decoding of con‐
4048 tent or transfer encodings and instead makes them passed on un‐
4049 altered, raw.
4050
4051 Providing --raw multiple times has no extra effect. Disable it
4052 again with --no-raw.
4053
4054 Example:
4055 curl --raw https://example.com
4056
4057 See also --tr-encoding.
4058
4059 -e, --referer <URL>
4060 (HTTP) Sends the "Referrer Page" information to the HTTP server.
4061 This can also be set with the -H, --header flag of course. When
4062 used with -L, --location you can append ";auto" to the -e,
4063 --referer URL to make curl automatically set the previous URL
4064 when it follows a Location: header. The ";auto" string can be
4065 used alone, even if you do not set an initial -e, --referer.
4066
4067 If -e, --referer is provided several times, the last set value
4068 will be used.
4069
4070 Examples:
4071 curl --referer "https://fake.example" https://example.com
4072 curl --referer "https://fake.example;auto" -L https://example.com
4073 curl --referer ";auto" -L https://example.com
4074
4075 See also -A, --user-agent and -H, --header.
4076
4077 -J, --remote-header-name
4078 (HTTP) This option tells the -O, --remote-name option to use the
4079 server-specified Content-Disposition filename instead of ex‐
4080 tracting a filename from the URL. If the server-provided file
4081 name contains a path, that will be stripped off before the file
4082 name is used.
4083
4084 The file is saved in the current directory, or in the directory
4085 specified with --output-dir.
4086
4087 If the server specifies a file name and a file with that name
4088 already exists in the destination directory, it will not be
4089 overwritten and an error will occur - unless you allow it by us‐
4090 ing the --clobber option. If the server does not specify a file
4091 name then this option has no effect.
4092
4093 There's no attempt to decode %-sequences (yet) in the provided
4094 file name, so this option may provide you with rather unexpected
4095 file names.
4096
4097 This feature uses the name from the "filename" field, it does
4098 not yet support the "filename*" field (filenames with explicit
4099 character sets).
4100
4101 WARNING: Exercise judicious use of this option, especially on
4102 Windows. A rogue server could send you the name of a DLL or
4103 other file that could be loaded automatically by Windows or some
4104 third party software.
4105
4106 Providing -J, --remote-header-name multiple times has no extra
4107 effect. Disable it again with --no-remote-header-name.
4108
4109 Example:
4110 curl -OJ https://example.com/file
4111
4112 See also -O, --remote-name.
4113
4114 --remote-name-all
4115 This option changes the default action for all given URLs to be
4116 dealt with as if -O, --remote-name were used for each one. So if
4117 you want to disable that for a specific URL after --remote-name-
4118 all has been used, you must use "-o -" or --no-remote-name.
4119
4120 Providing --remote-name-all multiple times has no extra effect.
4121 Disable it again with --no-remote-name-all.
4122
4123 Example:
4124 curl --remote-name-all ftp://example.com/file1 ftp://example.com/file2
4125
4126 See also -O, --remote-name.
4127
4128 -O, --remote-name
4129 Write output to a local file named like the remote file we get.
4130 (Only the file part of the remote file is used, the path is cut
4131 off.)
4132
4133 The file will be saved in the current working directory. If you
4134 want the file saved in a different directory, make sure you
4135 change the current working directory before invoking curl with
4136 this option or use --output-dir.
4137
4138 The remote file name to use for saving is extracted from the
4139 given URL, nothing else, and if it already exists it will be
4140 overwritten. If you want the server to be able to choose the
4141 file name refer to -J, --remote-header-name which can be used in
4142 addition to this option. If the server chooses a file name and
4143 that name already exists it will not be overwritten.
4144
4145 There is no URL decoding done on the file name. If it has %20 or
4146 other URL encoded parts of the name, they will end up as-is as
4147 file name.
4148
4149 You may use this option as many times as the number of URLs you
4150 have.
4151
4152 -O, --remote-name can be used several times in a command line
4153
4154 Example:
4155 curl -O https://example.com/filename
4156
4157 See also --remote-name-all, --output-dir and -J, --remote-
4158 header-name.
4159
4160 -R, --remote-time
4161 When used, this will make curl attempt to figure out the time‐
4162 stamp of the remote file, and if that is available make the lo‐
4163 cal file get that same timestamp.
4164
4165 Providing -R, --remote-time multiple times has no extra effect.
4166 Disable it again with --no-remote-time.
4167
4168 Example:
4169 curl --remote-time -o foo https://example.com
4170
4171 See also -O, --remote-name and -z, --time-cond.
4172
4173 --remove-on-error
4174 When curl returns an error when told to save output in a local
4175 file, this option removes that saved file before exiting. This
4176 prevents curl from leaving a partial file in the case of an er‐
4177 ror during transfer.
4178
4179 If the output is not a file, this option has no effect.
4180
4181 Providing --remove-on-error multiple times has no extra effect.
4182 Disable it again with --no-remove-on-error.
4183
4184 Example:
4185 curl --remove-on-error -o output https://example.com
4186
4187 See also -f, --fail. Added in 7.83.0.
4188
4189 --request-target <path>
4190 (HTTP) Tells curl to use an alternative "target" (path) instead
4191 of using the path as provided in the URL. Particularly useful
4192 when wanting to issue HTTP requests without leading slash or
4193 other data that does not follow the regular URL pattern, like
4194 "OPTIONS *".
4195
4196 If --request-target is provided several times, the last set
4197 value will be used.
4198
4199 Example:
4200 curl --request-target "*" -X OPTIONS https://example.com
4201
4202 See also -X, --request. Added in 7.55.0.
4203
4204 -X, --request <method>
4205 (HTTP) Specifies a custom request method to use when communicat‐
4206 ing with the HTTP server. The specified request method will be
4207 used instead of the method otherwise used (which defaults to
4208 GET). Read the HTTP 1.1 specification for details and explana‐
4209 tions. Common additional HTTP requests include PUT and DELETE,
4210 but related technologies like WebDAV offers PROPFIND, COPY, MOVE
4211 and more.
4212
4213 Normally you do not need this option. All sorts of GET, HEAD,
4214 POST and PUT requests are rather invoked by using dedicated com‐
4215 mand line options.
4216
4217 This option only changes the actual word used in the HTTP re‐
4218 quest, it does not alter the way curl behaves. So for example if
4219 you want to make a proper HEAD request, using -X HEAD will not
4220 suffice. You need to use the -I, --head option.
4221
4222 The method string you set with -X, --request will be used for
4223 all requests, which if you for example use -L, --location may
4224 cause unintended side-effects when curl does not change request
4225 method according to the HTTP 30x response codes - and similar.
4226
4227 (FTP) Specifies a custom FTP command to use instead of LIST when
4228 doing file lists with FTP.
4229
4230 (POP3) Specifies a custom POP3 command to use instead of LIST or
4231 RETR.
4232
4233
4234 (IMAP) Specifies a custom IMAP command to use instead of LIST.
4235 (Added in 7.30.0)
4236
4237 (SMTP) Specifies a custom SMTP command to use instead of HELP or
4238 VRFY. (Added in 7.34.0)
4239
4240 If -X, --request is provided several times, the last set value
4241 will be used.
4242
4243 Examples:
4244 curl -X "DELETE" https://example.com
4245 curl -X NLST ftp://example.com/
4246
4247 See also --request-target.
4248
4249 --resolve <[+]host:port:addr[,addr]...>
4250 Provide a custom address for a specific host and port pair. Us‐
4251 ing this, you can make the curl requests(s) use a specified ad‐
4252 dress and prevent the otherwise normally resolved address to be
4253 used. Consider it a sort of /etc/hosts alternative provided on
4254 the command line. The port number should be the number used for
4255 the specific protocol the host will be used for. It means you
4256 need several entries if you want to provide address for the same
4257 host but different ports.
4258
4259 By specifying '*' as host you can tell curl to resolve any host
4260 and specific port pair to the specified address. Wildcard is re‐
4261 solved last so any --resolve with a specific host and port will
4262 be used first.
4263
4264 The provided address set by this option will be used even if -4,
4265 --ipv4 or -6, --ipv6 is set to make curl use another IP version.
4266
4267 By prefixing the host with a '+' you can make the entry time out
4268 after curl's default timeout (1 minute). Note that this will
4269 only make sense for long running parallel transfers with a lot
4270 of files. In such cases, if this option is used curl will try to
4271 resolve the host as it normally would once the timeout has ex‐
4272 pired.
4273
4274 Support for providing the IP address within [brackets] was added
4275 in 7.57.0.
4276
4277 Support for providing multiple IP addresses per entry was added
4278 in 7.59.0.
4279
4280 Support for resolving with wildcard was added in 7.64.0.
4281
4282 Support for the '+' prefix was was added in 7.75.0.
4283
4284 This option can be used many times to add many host names to re‐
4285 solve.
4286
4287 --resolve can be used several times in a command line
4288
4289 Example:
4290 curl --resolve example.com:443:127.0.0.1 https://example.com
4291
4292 See also --connect-to and --alt-svc.
4293
4294 --retry-all-errors
4295 Retry on any error. This option is used together with --retry.
4296
4297 This option is the "sledgehammer" of retrying. Do not use this
4298 option by default (eg in curlrc), there may be unintended conse‐
4299 quences such as sending or receiving duplicate data. Do not use
4300 with redirected input or output. You'd be much better off han‐
4301 dling your unique problems in shell script. Please read the ex‐
4302 ample below.
4303
4304 WARNING: For server compatibility curl attempts to retry failed
4305 flaky transfers as close as possible to how they were started,
4306 but this is not possible with redirected input or output. For
4307 example, before retrying it removes output data from a failed
4308 partial transfer that was written to an output file. However
4309 this is not true of data redirected to a | pipe or > file, which
4310 are not reset. We strongly suggest you do not parse or record
4311 output via redirect in combination with this option, since you
4312 may receive duplicate data.
4313
4314 By default curl will not error on an HTTP response code that in‐
4315 dicates an HTTP error, if the transfer was successful. For exam‐
4316 ple, if a server replies 404 Not Found and the reply is fully
4317 received then that is not an error. When --retry is used then
4318 curl will retry on some HTTP response codes that indicate tran‐
4319 sient HTTP errors, but that does not include most 4xx response
4320 codes such as 404. If you want to retry on all response codes
4321 that indicate HTTP errors (4xx and 5xx) then combine with -f,
4322 --fail.
4323
4324 Providing --retry-all-errors multiple times has no extra effect.
4325 Disable it again with --no-retry-all-errors.
4326
4327 Example:
4328 curl --retry 5 --retry-all-errors https://example.com
4329
4330 See also --retry. Added in 7.71.0.
4331
4332 --retry-connrefused
4333 In addition to the other conditions, consider ECONNREFUSED as a
4334 transient error too for --retry. This option is used together
4335 with --retry.
4336
4337 Providing --retry-connrefused multiple times has no extra ef‐
4338 fect. Disable it again with --no-retry-connrefused.
4339
4340 Example:
4341 curl --retry-connrefused --retry 7 https://example.com
4342
4343 See also --retry and --retry-all-errors. Added in 7.52.0.
4344
4345 --retry-delay <seconds>
4346 Make curl sleep this amount of time before each retry when a
4347 transfer has failed with a transient error (it changes the de‐
4348 fault backoff time algorithm between retries). This option is
4349 only interesting if --retry is also used. Setting this delay to
4350 zero will make curl use the default backoff time.
4351
4352 If --retry-delay is provided several times, the last set value
4353 will be used.
4354
4355 Example:
4356 curl --retry-delay 5 --retry 7 https://example.com
4357
4358 See also --retry.
4359
4360 --retry-max-time <seconds>
4361 The retry timer is reset before the first transfer attempt. Re‐
4362 tries will be done as usual (see --retry) as long as the timer
4363 has not reached this given limit. Notice that if the timer has
4364 not reached the limit, the request will be made and while per‐
4365 forming, it may take longer than this given time period. To
4366 limit a single request's maximum time, use -m, --max-time. Set
4367 this option to zero to not timeout retries.
4368
4369 If --retry-max-time is provided several times, the last set
4370 value will be used.
4371
4372 Example:
4373 curl --retry-max-time 30 --retry 10 https://example.com
4374
4375 See also --retry.
4376
4377 --retry <num>
4378 If a transient error is returned when curl tries to perform a
4379 transfer, it will retry this number of times before giving up.
4380 Setting the number to 0 makes curl do no retries (which is the
4381 default). Transient error means either: a timeout, an FTP 4xx
4382 response code or an HTTP 408, 429, 500, 502, 503 or 504 response
4383 code.
4384
4385 When curl is about to retry a transfer, it will first wait one
4386 second and then for all forthcoming retries it will double the
4387 waiting time until it reaches 10 minutes which then will be the
4388 delay between the rest of the retries. By using --retry-delay
4389 you disable this exponential backoff algorithm. See also
4390 --retry-max-time to limit the total time allowed for retries.
4391
4392 Since curl 7.66.0, curl will comply with the Retry-After: re‐
4393 sponse header if one was present to know when to issue the next
4394 retry.
4395
4396 If --retry is provided several times, the last set value will be
4397 used.
4398
4399 Example:
4400 curl --retry 7 https://example.com
4401
4402 See also --retry-max-time.
4403
4404 --sasl-authzid <identity>
4405 Use this authorization identity (authzid), during SASL PLAIN au‐
4406 thentication, in addition to the authentication identity (auth‐
4407 cid) as specified by -u, --user.
4408
4409 If the option is not specified, the server will derive the au‐
4410 thzid from the authcid, but if specified, and depending on the
4411 server implementation, it may be used to access another user's
4412 inbox, that the user has been granted access to, or a shared
4413 mailbox for example.
4414
4415 If --sasl-authzid is provided several times, the last set value
4416 will be used.
4417
4418 Example:
4419 curl --sasl-authzid zid imap://example.com/
4420
4421 See also --login-options. Added in 7.66.0.
4422
4423 --sasl-ir
4424 Enable initial response in SASL authentication.
4425
4426 Providing --sasl-ir multiple times has no extra effect. Disable
4427 it again with --no-sasl-ir.
4428
4429 Example:
4430 curl --sasl-ir imap://example.com/
4431
4432 See also --sasl-authzid. Added in 7.31.0.
4433
4434 --service-name <name>
4435 This option allows you to change the service name for SPNEGO.
4436
4437 Examples: --negotiate --service-name sockd would use
4438 sockd/server-name.
4439
4440 If --service-name is provided several times, the last set value
4441 will be used.
4442
4443 Example:
4444 curl --service-name sockd/server https://example.com
4445
4446 See also --negotiate and --proxy-service-name. Added in 7.43.0.
4447
4448 -S, --show-error
4449 When used with -s, --silent, it makes curl show an error message
4450 if it fails.
4451
4452 This option is global and does not need to be specified for each
4453 use of --next.
4454
4455 Providing -S, --show-error multiple times has no extra effect.
4456 Disable it again with --no-show-error.
4457
4458 Example:
4459 curl --show-error --silent https://example.com
4460
4461 See also --no-progress-meter.
4462
4463 -s, --silent
4464 Silent or quiet mode. Do not show progress meter or error mes‐
4465 sages. Makes Curl mute. It will still output the data you ask
4466 for, potentially even to the terminal/stdout unless you redirect
4467 it.
4468
4469 Use -S, --show-error in addition to this option to disable
4470 progress meter but still show error messages.
4471
4472 Providing -s, --silent multiple times has no extra effect. Dis‐
4473 able it again with --no-silent.
4474
4475 Example:
4476 curl -s https://example.com
4477
4478 See also -v, --verbose, --stderr and --no-progress-meter.
4479
4480 --socks4 <host[:port]>
4481 Use the specified SOCKS4 proxy. If the port number is not speci‐
4482 fied, it is assumed at port 1080. Using this socket type make
4483 curl resolve the host name and passing the address on to the
4484 proxy.
4485
4486 To specify proxy on a unix domain socket, use localhost for
4487 host, e.g. socks4://localhost/path/to/socket.sock
4488
4489 This option overrides any previous use of -x, --proxy, as they
4490 are mutually exclusive.
4491
4492 This option is superfluous since you can specify a socks4 proxy
4493 with -x, --proxy using a socks4:// protocol prefix.
4494
4495 Since 7.52.0, --preproxy can be used to specify a SOCKS proxy at
4496 the same time -x, --proxy is used with an HTTP/HTTPS proxy. In
4497 such a case curl first connects to the SOCKS proxy and then con‐
4498 nects (through SOCKS) to the HTTP or HTTPS proxy.
4499
4500 If --socks4 is provided several times, the last set value will
4501 be used.
4502
4503 Example:
4504 curl --socks4 hostname:4096 https://example.com
4505
4506 See also --socks4a, --socks5 and --socks5-hostname.
4507
4508 --socks4a <host[:port]>
4509 Use the specified SOCKS4a proxy. If the port number is not spec‐
4510 ified, it is assumed at port 1080. This asks the proxy to re‐
4511 solve the host name.
4512
4513 To specify proxy on a unix domain socket, use localhost for
4514 host, e.g. socks4a://localhost/path/to/socket.sock
4515
4516 This option overrides any previous use of -x, --proxy, as they
4517 are mutually exclusive.
4518
4519 This option is superfluous since you can specify a socks4a proxy
4520 with -x, --proxy using a socks4a:// protocol prefix.
4521
4522 Since 7.52.0, --preproxy can be used to specify a SOCKS proxy at
4523 the same time -x, --proxy is used with an HTTP/HTTPS proxy. In
4524 such a case curl first connects to the SOCKS proxy and then con‐
4525 nects (through SOCKS) to the HTTP or HTTPS proxy.
4526
4527 If --socks4a is provided several times, the last set value will
4528 be used.
4529
4530 Example:
4531 curl --socks4a hostname:4096 https://example.com
4532
4533 See also --socks4, --socks5 and --socks5-hostname.
4534
4535 --socks5-basic
4536 Tells curl to use username/password authentication when connect‐
4537 ing to a SOCKS5 proxy. The username/password authentication is
4538 enabled by default. Use --socks5-gssapi to force GSS-API au‐
4539 thentication to SOCKS5 proxies.
4540
4541 Providing --socks5-basic multiple times has no extra effect.
4542
4543 Example:
4544 curl --socks5-basic --socks5 hostname:4096 https://example.com
4545
4546 See also --socks5. Added in 7.55.0.
4547
4548 --socks5-gssapi-nec
4549 As part of the GSS-API negotiation a protection mode is negoti‐
4550 ated. RFC 1961 says in section 4.3/4.4 it should be protected,
4551 but the NEC reference implementation does not. The option
4552 --socks5-gssapi-nec allows the unprotected exchange of the pro‐
4553 tection mode negotiation.
4554
4555 Providing --socks5-gssapi-nec multiple times has no extra ef‐
4556 fect. Disable it again with --no-socks5-gssapi-nec.
4557
4558 Example:
4559 curl --socks5-gssapi-nec --socks5 hostname:4096 https://example.com
4560
4561 See also --socks5.
4562
4563 --socks5-gssapi-service <name>
4564 The default service name for a socks server is rcmd/server-fqdn.
4565 This option allows you to change it.
4566
4567 Examples: --socks5 proxy-name --socks5-gssapi-service sockd
4568 would use sockd/proxy-name --socks5 proxy-name --socks5-gssapi-
4569 service sockd/real-name would use sockd/real-name for cases
4570 where the proxy-name does not match the principal name.
4571
4572 If --socks5-gssapi-service is provided several times, the last
4573 set value will be used.
4574
4575 Example:
4576 curl --socks5-gssapi-service sockd --socks5 hostname:4096 https://example.com
4577
4578 See also --socks5.
4579
4580 --socks5-gssapi
4581 Tells curl to use GSS-API authentication when connecting to a
4582 SOCKS5 proxy. The GSS-API authentication is enabled by default
4583 (if curl is compiled with GSS-API support). Use --socks5-basic
4584 to force username/password authentication to SOCKS5 proxies.
4585
4586 Providing --socks5-gssapi multiple times has no extra effect.
4587 Disable it again with --no-socks5-gssapi.
4588
4589 Example:
4590 curl --socks5-gssapi --socks5 hostname:4096 https://example.com
4591
4592 See also --socks5. Added in 7.55.0.
4593
4594 --socks5-hostname <host[:port]>
4595 Use the specified SOCKS5 proxy (and let the proxy resolve the
4596 host name). If the port number is not specified, it is assumed
4597 at port 1080.
4598
4599 To specify proxy on a unix domain socket, use localhost for
4600 host, e.g. socks5h://localhost/path/to/socket.sock
4601
4602 This option overrides any previous use of -x, --proxy, as they
4603 are mutually exclusive.
4604
4605 This option is superfluous since you can specify a socks5 host‐
4606 name proxy with -x, --proxy using a socks5h:// protocol prefix.
4607
4608 Since 7.52.0, --preproxy can be used to specify a SOCKS proxy at
4609 the same time -x, --proxy is used with an HTTP/HTTPS proxy. In
4610 such a case curl first connects to the SOCKS proxy and then con‐
4611 nects (through SOCKS) to the HTTP or HTTPS proxy.
4612
4613 If --socks5-hostname is provided several times, the last set
4614 value will be used.
4615
4616 Example:
4617 curl --socks5-hostname proxy.example:7000 https://example.com
4618
4619 See also --socks5 and --socks4a.
4620
4621 --socks5 <host[:port]>
4622 Use the specified SOCKS5 proxy - but resolve the host name lo‐
4623 cally. If the port number is not specified, it is assumed at
4624 port 1080.
4625
4626 To specify proxy on a unix domain socket, use localhost for
4627 host, e.g. socks5://localhost/path/to/socket.sock
4628
4629 This option overrides any previous use of -x, --proxy, as they
4630 are mutually exclusive.
4631
4632 This option is superfluous since you can specify a socks5 proxy
4633 with -x, --proxy using a socks5:// protocol prefix.
4634
4635 Since 7.52.0, --preproxy can be used to specify a SOCKS proxy at
4636 the same time -x, --proxy is used with an HTTP/HTTPS proxy. In
4637 such a case curl first connects to the SOCKS proxy and then con‐
4638 nects (through SOCKS) to the HTTP or HTTPS proxy.
4639
4640 This option (as well as --socks4) does not work with IPV6, FTPS
4641 or LDAP.
4642
4643 If --socks5 is provided several times, the last set value will
4644 be used.
4645
4646 Example:
4647 curl --socks5 proxy.example:7000 https://example.com
4648
4649 See also --socks5-hostname and --socks4a.
4650
4651 -Y, --speed-limit <speed>
4652 If a transfer is slower than this given speed (in bytes per sec‐
4653 ond) for speed-time seconds it gets aborted. speed-time is set
4654 with -y, --speed-time and is 30 if not set.
4655
4656 If -Y, --speed-limit is provided several times, the last set
4657 value will be used.
4658
4659 Example:
4660 curl --speed-limit 300 --speed-time 10 https://example.com
4661
4662 See also -y, --speed-time, --limit-rate and -m, --max-time.
4663
4664 -y, --speed-time <seconds>
4665 If a transfer runs slower than speed-limit bytes per second dur‐
4666 ing a speed-time period, the transfer is aborted. If speed-time
4667 is used, the default speed-limit will be 1 unless set with -Y,
4668 --speed-limit.
4669
4670 This option controls transfers (in both directions) but will not
4671 affect slow connects etc. If this is a concern for you, try the
4672 --connect-timeout option.
4673
4674 If -y, --speed-time is provided several times, the last set
4675 value will be used.
4676
4677 Example:
4678 curl --speed-limit 300 --speed-time 10 https://example.com
4679
4680 See also -Y, --speed-limit and --limit-rate.
4681
4682 --ssl-allow-beast
4683 This option tells curl to not work around a security flaw in the
4684 SSL3 and TLS1.0 protocols known as BEAST. If this option is not
4685 used, the SSL layer may use workarounds known to cause interop‐
4686 erability problems with some older SSL implementations.
4687
4688 WARNING: this option loosens the SSL security, and by using this
4689 flag you ask for exactly that.
4690
4691 Providing --ssl-allow-beast multiple times has no extra effect.
4692 Disable it again with --no-ssl-allow-beast.
4693
4694 Example:
4695 curl --ssl-allow-beast https://example.com
4696
4697 See also --proxy-ssl-allow-beast and -k, --insecure.
4698
4699 --ssl-auto-client-cert
4700 Tell libcurl to automatically locate and use a client certifi‐
4701 cate for authentication, when requested by the server. This op‐
4702 tion is only supported for Schannel (the native Windows SSL li‐
4703 brary). Prior to 7.77.0 this was the default behavior in libcurl
4704 with Schannel. Since the server can request any certificate that
4705 supports client authentication in the OS certificate store it
4706 could be a privacy violation and unexpected.
4707
4708 Providing --ssl-auto-client-cert multiple times has no extra ef‐
4709 fect. Disable it again with --no-ssl-auto-client-cert.
4710
4711 Example:
4712 curl --ssl-auto-client-cert https://example.com
4713
4714 See also --proxy-ssl-auto-client-cert. Added in 7.77.0.
4715
4716 --ssl-no-revoke
4717 (Schannel) This option tells curl to disable certificate revoca‐
4718 tion checks. WARNING: this option loosens the SSL security, and
4719 by using this flag you ask for exactly that.
4720
4721 Providing --ssl-no-revoke multiple times has no extra effect.
4722 Disable it again with --no-ssl-no-revoke.
4723
4724 Example:
4725 curl --ssl-no-revoke https://example.com
4726
4727 See also --crlfile. Added in 7.44.0.
4728
4729 --ssl-reqd
4730 (FTP IMAP POP3 SMTP LDAP) Require SSL/TLS for the connection.
4731 Terminates the connection if the transfer cannot be upgraded to
4732 use SSL/TLS.
4733
4734 This option is handled in LDAP since version 7.81.0. It is fully
4735 supported by the OpenLDAP backend and rejected by the generic
4736 ldap backend if explicit TLS is required.
4737
4738 This option is unnecessary if you use a URL scheme that in it‐
4739 self implies immediate and implicit use of TLS, like for FTPS,
4740 IMAPS, POP3S, SMTPS and LDAPS. Such transfers will always fail
4741 if the TLS handshake does not work.
4742
4743 This option was formerly known as --ftp-ssl-reqd.
4744
4745 Providing --ssl-reqd multiple times has no extra effect. Dis‐
4746 able it again with --no-ssl-reqd.
4747
4748 Example:
4749 curl --ssl-reqd ftp://example.com
4750
4751 See also --ssl and -k, --insecure.
4752
4753 --ssl-revoke-best-effort
4754 (Schannel) This option tells curl to ignore certificate revoca‐
4755 tion checks when they failed due to missing/offline distribution
4756 points for the revocation check lists.
4757
4758 Providing --ssl-revoke-best-effort multiple times has no extra
4759 effect. Disable it again with --no-ssl-revoke-best-effort.
4760
4761 Example:
4762 curl --ssl-revoke-best-effort https://example.com
4763
4764 See also --crlfile and -k, --insecure. Added in 7.70.0.
4765
4766 --ssl (FTP IMAP POP3 SMTP LDAP) Warning: this is considered an inse‐
4767 cure option. Consider using --ssl-reqd instead to be sure curl
4768 upgrades to a secure connection.
4769
4770 Try to use SSL/TLS for the connection. Reverts to a non-secure
4771 connection if the server does not support SSL/TLS. See also
4772 --ftp-ssl-control and --ssl-reqd for different levels of encryp‐
4773 tion required.
4774
4775 This option is handled in LDAP since version 7.81.0. It is fully
4776 supported by the OpenLDAP backend and ignored by the generic
4777 ldap backend.
4778
4779 Please note that a server may close the connection if the nego‐
4780 tiation does not succeed.
4781
4782 This option was formerly known as --ftp-ssl. That option name
4783 can still be used but will be removed in a future version.
4784
4785 Providing --ssl multiple times has no extra effect. Disable it
4786 again with --no-ssl.
4787
4788 Example:
4789 curl --ssl pop3://example.com/
4790
4791 See also --ssl-reqd, -k, --insecure and --ciphers.
4792
4793 -2, --sslv2
4794 (SSL) This option previously asked curl to use SSLv2, but start‐
4795 ing in curl 7.77.0 this instruction is ignored. SSLv2 is widely
4796 considered insecure (see RFC 6176).
4797
4798 Providing -2, --sslv2 multiple times has no extra effect.
4799
4800 Example:
4801 curl --sslv2 https://example.com
4802
4803 See also --http1.1 and --http2. -2, --sslv2 requires that the
4804 underlying libcurl was built to support TLS. This option is mu‐
4805 tually exclusive to -3, --sslv3 and -1, --tlsv1 and --tlsv1.1
4806 and --tlsv1.2.
4807
4808 -3, --sslv3
4809 (SSL) This option previously asked curl to use SSLv3, but start‐
4810 ing in curl 7.77.0 this instruction is ignored. SSLv3 is widely
4811 considered insecure (see RFC 7568).
4812
4813 Providing -3, --sslv3 multiple times has no extra effect.
4814
4815 Example:
4816 curl --sslv3 https://example.com
4817
4818 See also --http1.1 and --http2. -3, --sslv3 requires that the
4819 underlying libcurl was built to support TLS. This option is mu‐
4820 tually exclusive to -2, --sslv2 and -1, --tlsv1 and --tlsv1.1
4821 and --tlsv1.2.
4822
4823 --stderr <file>
4824 Redirect all writes to stderr to the specified file instead. If
4825 the file name is a plain '-', it is instead written to stdout.
4826
4827 This option is global and does not need to be specified for each
4828 use of --next.
4829
4830 If --stderr is provided several times, the last set value will
4831 be used.
4832
4833 Example:
4834 curl --stderr output.txt https://example.com
4835
4836 See also -v, --verbose and -s, --silent.
4837
4838 --styled-output
4839 Enables the automatic use of bold font styles when writing HTTP
4840 headers to the terminal. Use --no-styled-output to switch them
4841 off.
4842
4843 Styled output requires a terminal that supports bold fonts. This
4844 feature is not present on curl for Windows due to lack of this
4845 capability.
4846
4847 This option is global and does not need to be specified for each
4848 use of --next.
4849
4850 Providing --styled-output multiple times has no extra effect.
4851 Disable it again with --no-styled-output.
4852
4853 Example:
4854 curl --styled-output -I https://example.com
4855
4856 See also -I, --head and -v, --verbose. Added in 7.61.0.
4857
4858 --suppress-connect-headers
4859 When -p, --proxytunnel is used and a CONNECT request is made do
4860 not output proxy CONNECT response headers. This option is meant
4861 to be used with -D, --dump-header or -i, --include which are
4862 used to show protocol headers in the output. It has no effect on
4863 debug options such as -v, --verbose or --trace, or any statis‐
4864 tics.
4865
4866 Providing --suppress-connect-headers multiple times has no extra
4867 effect. Disable it again with --no-suppress-connect-headers.
4868
4869 Example:
4870 curl --suppress-connect-headers --include -x proxy https://example.com
4871
4872 See also -D, --dump-header, -i, --include and -p, --proxytunnel.
4873 Added in 7.54.0.
4874
4875 --tcp-fastopen
4876
4877 Enable use of TCP Fast Open (RFC 7413). TCP Fast Open is a TCP
4878 extension that allows data to get sent earlier over the connec‐
4879 tion (before the final handshake ACK) if the client and server
4880 have been connected previously.
4881
4882 Providing --tcp-fastopen multiple times has no extra effect.
4883 Disable it again with --no-tcp-fastopen.
4884
4885 Example:
4886 curl --tcp-fastopen https://example.com
4887
4888 See also --false-start. Added in 7.49.0.
4889
4890 --tcp-nodelay
4891 Turn on the TCP_NODELAY option. See the curl_easy_setopt(3) man
4892 page for details about this option.
4893
4894 Since 7.50.2, curl sets this option by default and you need to
4895 explicitly switch it off if you do not want it on.
4896
4897 Providing --tcp-nodelay multiple times has no extra effect.
4898 Disable it again with --no-tcp-nodelay.
4899
4900 Example:
4901 curl --tcp-nodelay https://example.com
4902
4903 See also -N, --no-buffer.
4904
4905 -t, --telnet-option <opt=val>
4906 Pass options to the telnet protocol. Supported options are:
4907
4908 TTYPE=<term> Sets the terminal type.
4909
4910 XDISPLOC=<X display> Sets the X display location.
4911
4912 NEW_ENV=<var,val> Sets an environment variable.
4913
4914 -t, --telnet-option can be used several times in a command line
4915
4916 Example:
4917 curl -t TTYPE=vt100 telnet://example.com/
4918
4919 See also -K, --config.
4920
4921 --tftp-blksize <value>
4922 (TFTP) Set TFTP BLKSIZE option (must be >512). This is the block
4923 size that curl will try to use when transferring data to or from
4924 a TFTP server. By default 512 bytes will be used.
4925
4926 If --tftp-blksize is provided several times, the last set value
4927 will be used.
4928
4929 Example:
4930 curl --tftp-blksize 1024 tftp://example.com/file
4931
4932 See also --tftp-no-options.
4933
4934 --tftp-no-options
4935 (TFTP) Tells curl not to send TFTP options requests.
4936
4937 This option improves interop with some legacy servers that do
4938 not acknowledge or properly implement TFTP options. When this
4939 option is used --tftp-blksize is ignored.
4940
4941 Providing --tftp-no-options multiple times has no extra effect.
4942 Disable it again with --no-tftp-no-options.
4943
4944 Example:
4945 curl --tftp-no-options tftp://192.168.0.1/
4946
4947 See also --tftp-blksize. Added in 7.48.0.
4948
4949 -z, --time-cond <time>
4950 (HTTP FTP) Request a file that has been modified later than the
4951 given time and date, or one that has been modified before that
4952 time. The <date expression> can be all sorts of date strings or
4953 if it does not match any internal ones, it is taken as a file‐
4954 name and tries to get the modification date (mtime) from <file>
4955 instead. See the curl_getdate(3) man pages for date expression
4956 details.
4957
4958 Start the date expression with a dash (-) to make it request for
4959 a document that is older than the given date/time, default is a
4960 document that is newer than the specified date/time.
4961
4962 If -z, --time-cond is provided several times, the last set value
4963 will be used.
4964
4965 Examples:
4966 curl -z "Wed 01 Sep 2021 12:18:00" https://example.com
4967 curl -z "-Wed 01 Sep 2021 12:18:00" https://example.com
4968 curl -z file https://example.com
4969
4970 See also --etag-compare and -R, --remote-time.
4971
4972 --tls-max <VERSION>
4973 (TLS) VERSION defines maximum supported TLS version. The minimum
4974 acceptable version is set by tlsv1.0, tlsv1.1, tlsv1.2 or
4975 tlsv1.3.
4976
4977 If the connection is done without TLS, this option has no ef‐
4978 fect. This includes QUIC-using (HTTP/3) transfers.
4979
4980
4981 default
4982 Use up to recommended TLS version.
4983
4984 1.0 Use up to TLSv1.0.
4985
4986 1.1 Use up to TLSv1.1.
4987
4988 1.2 Use up to TLSv1.2.
4989
4990 1.3 Use up to TLSv1.3.
4991
4992 If --tls-max is provided several times, the last set value will
4993 be used.
4994
4995 Examples:
4996 curl --tls-max 1.2 https://example.com
4997 curl --tls-max 1.3 --tlsv1.2 https://example.com
4998
4999 See also --tlsv1.0, --tlsv1.1, --tlsv1.2 and --tlsv1.3. --tls-
5000 max requires that the underlying libcurl was built to support
5001 TLS. Added in 7.54.0.
5002
5003 --tls13-ciphers <ciphersuite list>
5004 (TLS) Specifies which cipher suites to use in the connection if
5005 it negotiates TLS 1.3. The list of ciphers suites must specify
5006 valid ciphers. Read up on TLS 1.3 cipher suite details on this
5007 URL:
5008
5009 https://curl.se/docs/ssl-ciphers.html
5010
5011 This option is currently used only when curl is built to use
5012 OpenSSL 1.1.1 or later or Schannel. If you are using a different
5013 SSL backend you can try setting TLS 1.3 cipher suites by using
5014 the --ciphers option.
5015
5016 If --tls13-ciphers is provided several times, the last set value
5017 will be used.
5018
5019 Example:
5020 curl --tls13-ciphers TLS_AES_128_GCM_SHA256 https://example.com
5021
5022 See also --ciphers, --curves and --proxy-tls13-ciphers. Added in
5023 7.61.0.
5024
5025 --tlsauthtype <type>
5026 Set TLS authentication type. Currently, the only supported op‐
5027 tion is "SRP", for TLS-SRP (RFC 5054). If --tlsuser and
5028 --tlspassword are specified but --tlsauthtype is not, then this
5029 option defaults to "SRP". This option works only if the underly‐
5030 ing libcurl is built with TLS-SRP support, which requires
5031 OpenSSL or GnuTLS with TLS-SRP support.
5032
5033 If --tlsauthtype is provided several times, the last set value
5034 will be used.
5035
5036 Example:
5037 curl --tlsauthtype SRP https://example.com
5038
5039 See also --tlsuser.
5040
5041 --tlspassword <string>
5042 Set password for use with the TLS authentication method speci‐
5043 fied with --tlsauthtype. Requires that --tlsuser also be set.
5044
5045 This option does not work with TLS 1.3.
5046
5047 If --tlspassword is provided several times, the last set value
5048 will be used.
5049
5050 Example:
5051 curl --tlspassword pwd --tlsuser user https://example.com
5052
5053 See also --tlsuser.
5054
5055 --tlsuser <name>
5056 Set username for use with the TLS authentication method speci‐
5057 fied with --tlsauthtype. Requires that --tlspassword also is
5058 set.
5059
5060 This option does not work with TLS 1.3.
5061
5062 If --tlsuser is provided several times, the last set value will
5063 be used.
5064
5065 Example:
5066 curl --tlspassword pwd --tlsuser user https://example.com
5067
5068 See also --tlspassword.
5069
5070 --tlsv1.0
5071 (TLS) Forces curl to use TLS version 1.0 or later when connect‐
5072 ing to a remote TLS server.
5073
5074 In old versions of curl this option was documented to allow
5075 _only_ TLS 1.0. That behavior was inconsistent depending on the
5076 TLS library. Use --tls-max if you want to set a maximum TLS ver‐
5077 sion.
5078
5079 Providing --tlsv1.0 multiple times has no extra effect.
5080
5081 Example:
5082 curl --tlsv1.0 https://example.com
5083
5084 See also --tlsv1.3. Added in 7.34.0.
5085
5086 --tlsv1.1
5087 (TLS) Forces curl to use TLS version 1.1 or later when connect‐
5088 ing to a remote TLS server.
5089
5090 In old versions of curl this option was documented to allow
5091 _only_ TLS 1.1. That behavior was inconsistent depending on the
5092 TLS library. Use --tls-max if you want to set a maximum TLS ver‐
5093 sion.
5094
5095 Providing --tlsv1.1 multiple times has no extra effect.
5096
5097 Example:
5098 curl --tlsv1.1 https://example.com
5099
5100 See also --tlsv1.3 and --tls-max. Added in 7.34.0.
5101
5102 --tlsv1.2
5103 (TLS) Forces curl to use TLS version 1.2 or later when connect‐
5104 ing to a remote TLS server.
5105
5106 In old versions of curl this option was documented to allow
5107 _only_ TLS 1.2. That behavior was inconsistent depending on the
5108 TLS library. Use --tls-max if you want to set a maximum TLS ver‐
5109 sion.
5110
5111 Providing --tlsv1.2 multiple times has no extra effect.
5112
5113 Example:
5114 curl --tlsv1.2 https://example.com
5115
5116 See also --tlsv1.3 and --tls-max. Added in 7.34.0.
5117
5118 --tlsv1.3
5119 (TLS) Forces curl to use TLS version 1.3 or later when connect‐
5120 ing to a remote TLS server.
5121
5122 If the connection is done without TLS, this option has no ef‐
5123 fect. This includes QUIC-using (HTTP/3) transfers.
5124
5125 Note that TLS 1.3 is not supported by all TLS backends.
5126
5127 Providing --tlsv1.3 multiple times has no extra effect.
5128
5129 Example:
5130 curl --tlsv1.3 https://example.com
5131
5132 See also --tlsv1.2 and --tls-max. Added in 7.52.0.
5133
5134 -1, --tlsv1
5135 (TLS) Tells curl to use at least TLS version 1.x when negotiat‐
5136 ing with a remote TLS server. That means TLS version 1.0 or
5137 higher
5138
5139 Providing -1, --tlsv1 multiple times has no extra effect.
5140
5141 Example:
5142 curl --tlsv1 https://example.com
5143
5144 See also --http1.1 and --http2. -1, --tlsv1 requires that the
5145 underlying libcurl was built to support TLS. This option is mu‐
5146 tually exclusive to --tlsv1.1 and --tlsv1.2 and --tlsv1.3.
5147
5148 --tr-encoding
5149 (HTTP) Request a compressed Transfer-Encoding response using one
5150 of the algorithms curl supports, and uncompress the data while
5151 receiving it.
5152
5153 Providing --tr-encoding multiple times has no extra effect.
5154 Disable it again with --no-tr-encoding.
5155
5156 Example:
5157 curl --tr-encoding https://example.com
5158
5159 See also --compressed.
5160
5161 --trace-ascii <file>
5162 Enables a full trace dump of all incoming and outgoing data, in‐
5163 cluding descriptive information, to the given output file. Use
5164 "-" as filename to have the output sent to stdout.
5165
5166 This is similar to --trace, but leaves out the hex part and only
5167 shows the ASCII part of the dump. It makes smaller output that
5168 might be easier to read for untrained humans.
5169
5170 This option is global and does not need to be specified for each
5171 use of --next.
5172
5173 If --trace-ascii is provided several times, the last set value
5174 will be used.
5175
5176 Example:
5177 curl --trace-ascii log.txt https://example.com
5178
5179 See also -v, --verbose and --trace. This option is mutually ex‐
5180 clusive to --trace and -v, --verbose.
5181
5182 --trace-ids
5183 Prepends the transfer and connection identifiers to each trace
5184 or verbose line that curl displays.
5185
5186 This option is global and does not need to be specified for each
5187 use of --next.
5188
5189 Providing --trace-ids multiple times has no extra effect. Dis‐
5190 able it again with --no-trace-ids.
5191
5192 Example:
5193 curl --trace-ids --trace-ascii output https://example.com
5194
5195 See also --trace and -v, --verbose. Added in 8.2.0.
5196
5197 --trace-time
5198 Prepends a time stamp to each trace or verbose line that curl
5199 displays.
5200
5201 This option is global and does not need to be specified for each
5202 use of --next.
5203
5204 Providing --trace-time multiple times has no extra effect. Dis‐
5205 able it again with --no-trace-time.
5206
5207 Example:
5208 curl --trace-time --trace-ascii output https://example.com
5209
5210 See also --trace and -v, --verbose.
5211
5212 --trace <file>
5213 Enables a full trace dump of all incoming and outgoing data, in‐
5214 cluding descriptive information, to the given output file. Use
5215 "-" as filename to have the output sent to stdout. Use "%" as
5216 filename to have the output sent to stderr.
5217
5218 This option is global and does not need to be specified for each
5219 use of --next.
5220
5221 If --trace is provided several times, the last set value will be
5222 used.
5223
5224 Example:
5225 curl --trace log.txt https://example.com
5226
5227 See also --trace-ascii, --trace-ids and --trace-time. This op‐
5228 tion is mutually exclusive to -v, --verbose and --trace-ascii.
5229
5230 --unix-socket <path>
5231 (HTTP) Connect through this Unix domain socket, instead of using
5232 the network.
5233
5234 If --unix-socket is provided several times, the last set value
5235 will be used.
5236
5237 Example:
5238 curl --unix-socket socket-path https://example.com
5239
5240 See also --abstract-unix-socket. Added in 7.40.0.
5241
5242 -T, --upload-file <file>
5243 This transfers the specified local file to the remote URL. If
5244 there is no file part in the specified URL, curl will append the
5245 local file name. NOTE that you must use a trailing / on the last
5246 directory to really prove to Curl that there is no file name or
5247 curl will think that your last directory name is the remote file
5248 name to use. That will most likely cause the upload operation to
5249 fail. If this is used on an HTTP(S) server, the PUT command will
5250 be used.
5251
5252 Use the file name "-" (a single dash) to use stdin instead of a
5253 given file. Alternately, the file name "." (a single period)
5254 may be specified instead of "-" to use stdin in non-blocking
5255 mode to allow reading server output while stdin is being up‐
5256 loaded.
5257
5258 You can specify one -T, --upload-file for each URL on the com‐
5259 mand line. Each -T, --upload-file + URL pair specifies what to
5260 upload and to where. curl also supports "globbing" of the -T,
5261 --upload-file argument, meaning that you can upload multiple
5262 files to a single URL by using the same URL globbing style sup‐
5263 ported in the URL.
5264
5265 When uploading to an SMTP server: the uploaded data is assumed
5266 to be RFC 5322 formatted. It has to feature the necessary set of
5267 headers and mail body formatted correctly by the user as curl
5268 will not transcode nor encode it further in any way.
5269
5270 -T, --upload-file can be used several times in a command line
5271
5272 Examples:
5273 curl -T file https://example.com
5274 curl -T "img[1-1000].png" ftp://ftp.example.com/
5275 curl --upload-file "{file1,file2}" https://example.com
5276
5277 See also -G, --get and -I, --head.
5278
5279 --url-query <data>
5280 (all) This option adds a piece of data, usually a name + value
5281 pair, to the end of the URL query part. The syntax is identical
5282 to that used for --data-urlencode with one extension:
5283
5284 If the argument starts with a '+' (plus), the rest of the string
5285 is provided as-is unencoded.
5286
5287 The query part of a URL is the one following the question mark
5288 on the right end.
5289
5290 --url-query can be used several times in a command line
5291
5292 Examples:
5293 curl --url-query name=val https://example.com
5294 curl --url-query =encodethis http://example.net/foo
5295 curl --url-query name@file https://example.com
5296 curl --url-query @fileonly https://example.com
5297 curl --url-query "+name=%20foo" https://example.com
5298
5299 See also --data-urlencode and -G, --get. Added in 7.87.0.
5300
5301 --url <url>
5302 Specify a URL to fetch. This option is mostly handy when you
5303 want to specify URL(s) in a config file.
5304
5305 If the given URL is missing a scheme name (such as "http://" or
5306 "ftp://" etc) then curl will make a guess based on the host. If
5307 the outermost sub-domain name matches DICT, FTP, IMAP, LDAP,
5308 POP3 or SMTP then that protocol will be used, otherwise HTTP
5309 will be used. Since 7.45.0 guessing can be disabled by setting a
5310 default protocol, see --proto-default for details.
5311
5312 To control where this URL is written, use the -o, --output or
5313 the -O, --remote-name options.
5314
5315 WARNING: On Windows, particular file:// accesses can be con‐
5316 verted to network accesses by the operating system. Beware!
5317
5318 --url can be used several times in a command line
5319
5320 Example:
5321 curl --url https://example.com
5322
5323 See also -:, --next and -K, --config.
5324
5325 -B, --use-ascii
5326 (FTP LDAP) Enable ASCII transfer. For FTP, this can also be en‐
5327 forced by using a URL that ends with ";type=A". This option
5328 causes data sent to stdout to be in text mode for win32 systems.
5329
5330 Providing -B, --use-ascii multiple times has no extra effect.
5331 Disable it again with --no-use-ascii.
5332
5333 Example:
5334 curl -B ftp://example.com/README
5335
5336 See also --crlf and --data-ascii.
5337
5338 -A, --user-agent <name>
5339 (HTTP) Specify the User-Agent string to send to the HTTP server.
5340 To encode blanks in the string, surround the string with single
5341 quote marks. This header can also be set with the -H, --header
5342 or the --proxy-header options.
5343
5344 If you give an empty argument to -A, --user-agent (""), it will
5345 remove the header completely from the request. If you prefer a
5346 blank header, you can set it to a single space (" ").
5347
5348 If -A, --user-agent is provided several times, the last set
5349 value will be used.
5350
5351 Example:
5352 curl -A "Agent 007" https://example.com
5353
5354 See also -H, --header and --proxy-header.
5355
5356 -u, --user <user:password>
5357 Specify the user name and password to use for server authentica‐
5358 tion. Overrides -n, --netrc and --netrc-optional.
5359
5360 If you simply specify the user name, curl will prompt for a
5361 password.
5362
5363 The user name and passwords are split up on the first colon,
5364 which makes it impossible to use a colon in the user name with
5365 this option. The password can, still.
5366
5367 On systems where it works, curl will hide the given option argu‐
5368 ment from process listings. This is not enough to protect cre‐
5369 dentials from possibly getting seen by other users on the same
5370 system as they will still be visible for a moment before
5371 cleared. Such sensitive data should be retrieved from a file in‐
5372 stead or similar and never used in clear text in a command line.
5373
5374 When using Kerberos V5 with a Windows based server you should
5375 include the Windows domain name in the user name, in order for
5376 the server to successfully obtain a Kerberos Ticket. If you do
5377 not, then the initial authentication handshake may fail.
5378
5379 When using NTLM, the user name can be specified simply as the
5380 user name, without the domain, if there is a single domain and
5381 forest in your setup for example.
5382
5383 To specify the domain name use either Down-Level Logon Name or
5384 UPN (User Principal Name) formats. For example, EXAMPLE\user and
5385 user@example.com respectively.
5386
5387 If you use a Windows SSPI-enabled curl binary and perform Ker‐
5388 beros V5, Negotiate, NTLM or Digest authentication then you can
5389 tell curl to select the user name and password from your envi‐
5390 ronment by specifying a single colon with this option: "-u :".
5391
5392 If -u, --user is provided several times, the last set value will
5393 be used.
5394
5395 Example:
5396 curl -u user:secret https://example.com
5397
5398 See also -n, --netrc and -K, --config.
5399
5400 -v, --verbose
5401 Makes curl verbose during the operation. Useful for debugging
5402 and seeing what's going on "under the hood". A line starting
5403 with '>' means "header data" sent by curl, '<' means "header
5404 data" received by curl that is hidden in normal cases, and a
5405 line starting with '*' means additional info provided by curl.
5406
5407 If you only want HTTP headers in the output, -i, --include or
5408 -D, --dump-header might be more suitable options.
5409
5410 If you think this option still does not give you enough details,
5411 consider using --trace or --trace-ascii instead.
5412
5413 This option is global and does not need to be specified for each
5414 use of --next.
5415
5416 Providing -v, --verbose multiple times has no extra effect.
5417 Disable it again with --no-verbose.
5418
5419 Example:
5420 curl --verbose https://example.com
5421
5422 See also -i, --include, -s, --silent, --trace and --trace-ascii.
5423 This option is mutually exclusive to --trace and --trace-ascii.
5424
5425 -V, --version
5426 Displays information about curl and the libcurl version it uses.
5427
5428 The first line includes the full version of curl, libcurl and
5429 other 3rd party libraries linked with the executable.
5430
5431 The second line (starts with "Protocols:") shows all protocols
5432 that libcurl reports to support.
5433
5434 The third line (starts with "Features:") shows specific features
5435 libcurl reports to offer. Available features include:
5436
5437 alt-svc
5438 Support for the Alt-Svc: header is provided.
5439
5440 AsynchDNS
5441 This curl uses asynchronous name resolves. Asynchronous
5442 name resolves can be done using either the c-ares or the
5443 threaded resolver backends.
5444
5445 brotli Support for automatic brotli compression over HTTP(S).
5446
5447 CharConv
5448 curl was built with support for character set conversions
5449 (like EBCDIC)
5450
5451 Debug This curl uses a libcurl built with Debug. This enables
5452 more error-tracking and memory debugging etc. For curl-
5453 developers only!
5454
5455 gsasl The built-in SASL authentication includes extensions to
5456 support SCRAM because libcurl was built with libgsasl.
5457
5458 GSS-API
5459 GSS-API is supported.
5460
5461 HSTS HSTS support is present.
5462
5463 HTTP2 HTTP/2 support has been built-in.
5464
5465 HTTP3 HTTP/3 support has been built-in.
5466
5467 HTTPS-proxy
5468 This curl is built to support HTTPS proxy.
5469
5470 IDN This curl supports IDN - international domain names.
5471
5472 IPv6 You can use IPv6 with this.
5473
5474 Kerberos
5475 Kerberos V5 authentication is supported.
5476
5477 Largefile
5478 This curl supports transfers of large files, files larger
5479 than 2GB.
5480
5481 libz Automatic decompression (via gzip, deflate) of compressed
5482 files over HTTP is supported.
5483
5484 MultiSSL
5485 This curl supports multiple TLS backends.
5486
5487 NTLM NTLM authentication is supported.
5488
5489 NTLM_WB
5490 NTLM delegation to winbind helper is supported.
5491
5492 PSL PSL is short for Public Suffix List and means that this
5493 curl has been built with knowledge about "public suf‐
5494 fixes".
5495
5496 SPNEGO SPNEGO authentication is supported.
5497
5498 SSL SSL versions of various protocols are supported, such as
5499 HTTPS, FTPS, POP3S and so on.
5500
5501 SSPI SSPI is supported.
5502
5503 TLS-SRP
5504 SRP (Secure Remote Password) authentication is supported
5505 for TLS.
5506
5507 TrackMemory
5508 Debug memory tracking is supported.
5509
5510 Unicode
5511 Unicode support on Windows.
5512
5513 UnixSockets
5514 Unix sockets support is provided.
5515
5516 zstd Automatic decompression (via zstd) of compressed files
5517 over HTTP is supported.
5518
5519 Example:
5520 curl --version
5521
5522 See also -h, --help and -M, --manual.
5523
5524 -w, --write-out <format>
5525 Make curl display information on stdout after a completed trans‐
5526 fer. The format is a string that may contain plain text mixed
5527 with any number of variables. The format can be specified as a
5528 literal "string", or you can have curl read the format from a
5529 file with "@filename" and to tell curl to read the format from
5530 stdin you write "@-".
5531
5532 The variables present in the output format will be substituted
5533 by the value or text that curl thinks fit, as described below.
5534 All variables are specified as %{variable_name} and to output a
5535 normal % you just write them as %%. You can output a newline by
5536 using \n, a carriage return with \r and a tab space with \t.
5537
5538 The output will be written to standard output, but this can be
5539 switched to standard error by using %{stderr}.
5540
5541 Output HTTP headers from the most recent request by using
5542 %header{name} where name is the case insensitive name of the
5543 header (without the trailing colon). The header contents are ex‐
5544 actly as sent over the network, with leading and trailing white‐
5545 space trimmed. Added in curl 7.84.0.
5546
5547 NOTE: In Windows the %-symbol is a special symbol used to expand
5548 environment variables. In batch files all occurrences of % must
5549 be doubled when using this option to properly escape. If this
5550 option is used at the command prompt then the % cannot be es‐
5551 caped and unintended expansion is possible.
5552
5553 The variables available are:
5554
5555 certs Output the certificate chain with details. Sup‐
5556 ported only by the OpenSSL, GnuTLS, Schannel,
5557 NSS, GSKit and Secure Transport backends. (Added
5558 in 7.88.0)
5559
5560 content_type The Content-Type of the requested document, if
5561 there was any.
5562
5563 errormsg The error message. (Added in 7.75.0)
5564
5565 exitcode The numerical exitcode of the transfer. (Added in
5566 7.75.0)
5567
5568 filename_effective
5569 The ultimate filename that curl writes out to.
5570 This is only meaningful if curl is told to write
5571 to a file with the -O, --remote-name or -o,
5572 --output option. It's most useful in combination
5573 with the -J, --remote-header-name option.
5574
5575 ftp_entry_path The initial path curl ended up in when logging on
5576 to the remote FTP server.
5577
5578 header_json A JSON object with all HTTP response headers from
5579 the recent transfer. Values are provided as ar‐
5580 rays, since in the case of multiple headers there
5581 can be multiple values. (Added in 7.83.0)
5582
5583 The header names provided in lowercase, listed in
5584 order of appearance over the wire. Except for du‐
5585 plicated headers. They are grouped on the first
5586 occurrence of that header, each value is pre‐
5587 sented in the JSON array.
5588
5589 http_code The numerical response code that was found in the
5590 last retrieved HTTP(S) or FTP(s) transfer.
5591
5592 http_connect The numerical code that was found in the last re‐
5593 sponse (from a proxy) to a curl CONNECT request.
5594
5595 http_version The http version that was effectively used.
5596 (Added in 7.50.0)
5597
5598 json A JSON object with all available keys.
5599
5600 local_ip The IP address of the local end of the most re‐
5601 cently done connection - can be either IPv4 or
5602 IPv6.
5603
5604 local_port The local port number of the most recently done
5605 connection.
5606
5607 method The http method used in the most recent HTTP re‐
5608 quest. (Added in 7.72.0)
5609
5610 num_certs Number of server certificates received in the TLS
5611 handshake. Supported only by the OpenSSL, GnuTLS,
5612 Schannel, NSS, GSKit and Secure Transport back‐
5613 ends. (Added in 7.88.0)
5614
5615 num_connects Number of new connects made in the recent trans‐
5616 fer.
5617
5618 num_headers The number of response headers in the most recent
5619 request (restarted at each redirect). Note that
5620 the status line IS NOT a header. (Added in
5621 7.73.0)
5622
5623 num_redirects Number of redirects that were followed in the re‐
5624 quest.
5625
5626 onerror The rest of the output is only shown if the
5627 transfer returned a non-zero error. (Added in
5628 7.75.0)
5629
5630 proxy_ssl_verify_result
5631 The result of the HTTPS proxy's SSL peer certifi‐
5632 cate verification that was requested. 0 means the
5633 verification was successful. (Added in 7.52.0)
5634
5635 redirect_url When an HTTP request was made without -L, --loca‐
5636 tion to follow redirects (or when --max-redirs is
5637 met), this variable will show the actual URL a
5638 redirect would have gone to.
5639
5640 referer The Referer: header, if there was any. (Added in
5641 7.76.0)
5642
5643 remote_ip The remote IP address of the most recently done
5644 connection - can be either IPv4 or IPv6.
5645
5646 remote_port The remote port number of the most recently done
5647 connection.
5648
5649 response_code The numerical response code that was found in the
5650 last transfer (formerly known as "http_code").
5651
5652 scheme The URL scheme (sometimes called protocol) that
5653 was effectively used. (Added in 7.52.0)
5654
5655 size_download The total amount of bytes that were downloaded.
5656 This is the size of the body/data that was trans‐
5657 ferred, excluding headers.
5658
5659 size_header The total amount of bytes of the downloaded head‐
5660 ers.
5661
5662 size_request The total amount of bytes that were sent in the
5663 HTTP request.
5664
5665 size_upload The total amount of bytes that were uploaded.
5666 This is the size of the body/data that was trans‐
5667 ferred, excluding headers.
5668
5669 speed_download The average download speed that curl measured for
5670 the complete download. Bytes per second.
5671
5672 speed_upload The average upload speed that curl measured for
5673 the complete upload. Bytes per second.
5674
5675 ssl_verify_result
5676 The result of the SSL peer certificate verifica‐
5677 tion that was requested. 0 means the verification
5678 was successful.
5679
5680 stderr From this point on, the -w, --write-out output
5681 will be written to standard error. (Added in
5682 7.63.0)
5683
5684 stdout From this point on, the -w, --write-out output
5685 will be written to standard output. This is the
5686 default, but can be used to switch back after
5687 switching to stderr. (Added in 7.63.0)
5688
5689 time_appconnect
5690 The time, in seconds, it took from the start un‐
5691 til the SSL/SSH/etc connect/handshake to the re‐
5692 mote host was completed.
5693
5694 time_connect The time, in seconds, it took from the start un‐
5695 til the TCP connect to the remote host (or proxy)
5696 was completed.
5697
5698 time_namelookup
5699 The time, in seconds, it took from the start un‐
5700 til the name resolving was completed.
5701
5702 time_pretransfer
5703 The time, in seconds, it took from the start un‐
5704 til the file transfer was just about to begin.
5705 This includes all pre-transfer commands and nego‐
5706 tiations that are specific to the particular pro‐
5707 tocol(s) involved.
5708
5709 time_redirect The time, in seconds, it took for all redirection
5710 steps including name lookup, connect, pretransfer
5711 and transfer before the final transaction was
5712 started. time_redirect shows the complete execu‐
5713 tion time for multiple redirections.
5714
5715 time_starttransfer
5716 The time, in seconds, it took from the start un‐
5717 til the first byte was just about to be trans‐
5718 ferred. This includes time_pretransfer and also
5719 the time the server needed to calculate the re‐
5720 sult.
5721
5722 time_total The total time, in seconds, that the full opera‐
5723 tion lasted.
5724
5725 url The URL that was fetched. (Added in 7.75.0)
5726
5727 url.scheme The scheme part of the URL that was fetched.
5728 (Added in 8.1.0)
5729
5730 url.user The user part of the URL that was fetched. (Added
5731 in 8.1.0)
5732
5733 url.password The password part of the URL that was fetched.
5734 (Added in 8.1.0)
5735
5736 url.options The options part of the URL that was fetched.
5737 (Added in 8.1.0)
5738
5739 url.host The host part of the URL that was fetched. (Added
5740 in 8.1.0)
5741
5742 url.port The port number of the URL that was fetched. If
5743 no port number was specified, but the URL scheme
5744 is known, that scheme's default port number is
5745 shown. (Added in 8.1.0)
5746
5747 url.path The path part of the URL that was fetched. (Added
5748 in 8.1.0)
5749
5750 url.query The query part of the URL that was fetched.
5751 (Added in 8.1.0)
5752
5753 url.fragment The fragment part of the URL that was fetched.
5754 (Added in 8.1.0)
5755
5756 url.zoneid The zoneid part of the URL that was fetched.
5757 (Added in 8.1.0)
5758
5759 urle.scheme The scheme part of the effective (last) URL that
5760 was fetched. (Added in 8.1.0)
5761
5762 urle.user The user part of the effective (last) URL that
5763 was fetched. (Added in 8.1.0)
5764
5765 urle.password The password part of the effective (last) URL
5766 that was fetched. (Added in 8.1.0)
5767
5768 urle.options The options part of the effective (last) URL that
5769 was fetched. (Added in 8.1.0)
5770
5771 urle.host The host part of the effective (last) URL that
5772 was fetched. (Added in 8.1.0)
5773
5774 urle.port The port number of the effective (last) URL that
5775 was fetched. If no port number was specified, but
5776 the URL scheme is known, that scheme's default
5777 port number is shown. (Added in 8.1.0)
5778
5779 urle.path The path part of the effective (last) URL that
5780 was fetched. (Added in 8.1.0)
5781
5782 urle.query The query part of the effective (last) URL that
5783 was fetched. (Added in 8.1.0)
5784
5785 urle.fragment The fragment part of the effective (last) URL
5786 that was fetched. (Added in 8.1.0)
5787
5788 urle.zoneid The zoneid part of the effective (last) URL that
5789 was fetched. (Added in 8.1.0)
5790
5791 urlnum The URL index number of this transfer, 0-indexed.
5792 De-globbed URLs share the same index number as
5793 the origin globbed URL. (Added in 7.75.0)
5794
5795 url_effective The URL that was fetched last. This is most mean‐
5796 ingful if you have told curl to follow location:
5797 headers.
5798
5799 If -w, --write-out is provided several times, the last set value
5800 will be used.
5801
5802 Example:
5803 curl -w '%{response_code}\n' https://example.com
5804
5805 See also -v, --verbose and -I, --head.
5806
5807 --xattr
5808 When saving output to a file, this option tells curl to store
5809 certain file metadata in extended file attributes. Currently,
5810 the URL is stored in the xdg.origin.url attribute and, for HTTP,
5811 the content type is stored in the mime_type attribute. If the
5812 file system does not support extended attributes, a warning is
5813 issued.
5814
5815 Providing --xattr multiple times has no extra effect. Disable
5816 it again with --no-xattr.
5817
5818 Example:
5819 curl --xattr -o storage https://example.com
5820
5821 See also -R, --remote-time, -w, --write-out and -v, --verbose.
5822
5824 ~/.curlrc
5825 Default config file, see -K, --config for details.
5826
5828 The environment variables can be specified in lower case or upper case.
5829 The lower case version has precedence. http_proxy is an exception as it
5830 is only available in lower case.
5831
5832 Using an environment variable to set the proxy has the same effect as
5833 using the -x, --proxy option.
5834
5835
5836 http_proxy [protocol://]<host>[:port]
5837 Sets the proxy server to use for HTTP.
5838
5839 HTTPS_PROXY [protocol://]<host>[:port]
5840 Sets the proxy server to use for HTTPS.
5841
5842 [url-protocol]_PROXY [protocol://]<host>[:port]
5843 Sets the proxy server to use for [url-protocol], where the pro‐
5844 tocol is a protocol that curl supports and as specified in a
5845 URL. FTP, FTPS, POP3, IMAP, SMTP, LDAP, etc.
5846
5847 ALL_PROXY [protocol://]<host>[:port]
5848 Sets the proxy server to use if no protocol-specific proxy is
5849 set.
5850
5851 NO_PROXY <comma-separated list of hosts/domains>
5852 list of host names that should not go through any proxy. If set
5853 to an asterisk '*' only, it matches all hosts. Each name in this
5854 list is matched as either a domain name which contains the host‐
5855 name, or the hostname itself.
5856
5857 This environment variable disables use of the proxy even when
5858 specified with the -x, --proxy option. That is NO_PROXY=di‐
5859 rect.example.com curl -x http://proxy.example.com http://di‐
5860 rect.example.com accesses the target URL directly, and
5861 NO_PROXY=direct.example.com curl -x http://proxy.example.com
5862 http://somewhere.example.com accesses the target URL through the
5863 proxy.
5864
5865 The list of host names can also be include numerical IP ad‐
5866 dresses, and IPv6 versions should then be given without enclos‐
5867 ing brackets.
5868
5869 Since 7.86.0, IP addresses can be specified using CIDR notation:
5870 an appended slash and number specifies the number of "network
5871 bits" out of the address to use in the comparison. For example
5872 "192.168.0.0/16" would match all addresses starting with
5873 "192.168".
5874
5875 APPDATA <dir>
5876 On Windows, this variable is used when trying to find the home
5877 directory. If the primary home variable are all unset.
5878
5879 COLUMNS <terminal width>
5880 If set, the specified number of characters will be used as the
5881 terminal width when the alternative progress-bar is shown. If
5882 not set, curl will try to figure it out using other ways.
5883
5884 CURL_CA_BUNDLE <file>
5885 If set, will be used as the --cacert value.
5886
5887 CURL_HOME <dir>
5888 If set, is the first variable curl checks when trying to find
5889 its home directory. If not set, it continues to check XDG_CON‐
5890 FIG_HOME
5891
5892 CURL_SSL_BACKEND <TLS backend>
5893 If curl was built with support for "MultiSSL", meaning that it
5894 has built-in support for more than one TLS backend, this envi‐
5895 ronment variable can be set to the case insensitive name of the
5896 particular backend to use when curl is invoked. Setting a name
5897 that is not a built-in alternative will make curl stay with the
5898 default.
5899
5900 SSL backend names (case-insensitive): bearssl, gnutls, gskit,
5901 mbedtls, nss, openssl, rustls, schannel, secure-transport, wolf‐
5902 ssl
5903
5904 HOME <dir>
5905 If set, this is used to find the home directory when that is
5906 needed. Like when looking for the default .curlrc. CURL_HOME and
5907 XDG_CONFIG_HOME have preference.
5908
5909 QLOGDIR <directory name>
5910 If curl was built with HTTP/3 support, setting this environment
5911 variable to a local directory will make curl produce qlogs in
5912 that directory, using file names named after the destination
5913 connection id (in hex). Do note that these files can become
5914 rather large. Works with both QUIC backends.
5915
5916 SHELL Used on VMS when trying to detect if using a DCL or a "unix"
5917 shell.
5918
5919 SSL_CERT_DIR <dir>
5920 If set, will be used as the --capath value.
5921
5922 SSL_CERT_FILE <path>
5923 If set, will be used as the --cacert value.
5924
5925 SSLKEYLOGFILE <file name>
5926 If you set this environment variable to a file name, curl will
5927 store TLS secrets from its connections in that file when invoked
5928 to enable you to analyze the TLS traffic in real time using net‐
5929 work analyzing tools such as Wireshark. This works with the fol‐
5930 lowing TLS backends: OpenSSL, libressl, BoringSSL, GnuTLS, NSS
5931 and wolfSSL.
5932
5933 USERPROFILE <dir>
5934 On Windows, this variable is used when trying to find the home
5935 directory. If the other, primary, variable are all unset. If
5936 set, curl will use the path "$USERPROFILE\Application Data".
5937
5938 XDG_CONFIG_HOME <dir>
5939 If CURL_HOME is not set, this variable is checked when looking
5940 for a default .curlrc file.
5941
5943 The proxy string may be specified with a protocol:// prefix to specify
5944 alternative proxy protocols.
5945
5946 If no protocol is specified in the proxy string or if the string does
5947 not match a supported one, the proxy will be treated as an HTTP proxy.
5948
5949 The supported proxy protocol prefixes are as follows:
5950
5951 http://
5952 Makes it use it as an HTTP proxy. The default if no scheme pre‐
5953 fix is used.
5954
5955 https://
5956 Makes it treated as an HTTPS proxy.
5957
5958 socks4://
5959 Makes it the equivalent of --socks4
5960
5961 socks4a://
5962 Makes it the equivalent of --socks4a
5963
5964 socks5://
5965 Makes it the equivalent of --socks5
5966
5967 socks5h://
5968 Makes it the equivalent of --socks5-hostname
5969
5971 There are a bunch of different error codes and their corresponding er‐
5972 ror messages that may appear under error conditions. At the time of
5973 this writing, the exit codes are:
5974
5975 0 Success. The operation completed successfully according to the
5976 instructions.
5977
5978 1 Unsupported protocol. This build of curl has no support for this
5979 protocol.
5980
5981 2 Failed to initialize.
5982
5983 3 URL malformed. The syntax was not correct.
5984
5985 4 A feature or option that was needed to perform the desired re‐
5986 quest was not enabled or was explicitly disabled at build-time.
5987 To make curl able to do this, you probably need another build of
5988 libcurl.
5989
5990 5 Could not resolve proxy. The given proxy host could not be re‐
5991 solved.
5992
5993 6 Could not resolve host. The given remote host could not be re‐
5994 solved.
5995
5996 7 Failed to connect to host.
5997
5998 8 Weird server reply. The server sent data curl could not parse.
5999
6000 9 FTP access denied. The server denied login or denied access to
6001 the particular resource or directory you wanted to reach. Most
6002 often you tried to change to a directory that does not exist on
6003 the server.
6004
6005 10 FTP accept failed. While waiting for the server to connect back
6006 when an active FTP session is used, an error code was sent over
6007 the control connection or similar.
6008
6009 11 FTP weird PASS reply. Curl could not parse the reply sent to the
6010 PASS request.
6011
6012 12 During an active FTP session while waiting for the server to
6013 connect back to curl, the timeout expired.
6014
6015 13 FTP weird PASV reply, Curl could not parse the reply sent to the
6016 PASV request.
6017
6018 14 FTP weird 227 format. Curl could not parse the 227-line the
6019 server sent.
6020
6021 15 FTP cannot use host. Could not resolve the host IP we got in the
6022 227-line.
6023
6024 16 HTTP/2 error. A problem was detected in the HTTP2 framing layer.
6025 This is somewhat generic and can be one out of several problems,
6026 see the error message for details.
6027
6028 17 FTP could not set binary. Could not change transfer method to
6029 binary.
6030
6031 18 Partial file. Only a part of the file was transferred.
6032
6033 19 FTP could not download/access the given file, the RETR (or simi‐
6034 lar) command failed.
6035
6036 21 FTP quote error. A quote command returned error from the server.
6037
6038 22 HTTP page not retrieved. The requested URL was not found or re‐
6039 turned another error with the HTTP error code being 400 or
6040 above. This return code only appears if -f, --fail is used.
6041
6042 23 Write error. Curl could not write data to a local filesystem or
6043 similar.
6044
6045 25 FTP could not STOR file. The server denied the STOR operation,
6046 used for FTP uploading.
6047
6048 26 Read error. Various reading problems.
6049
6050 27 Out of memory. A memory allocation request failed.
6051
6052 28 Operation timeout. The specified time-out period was reached ac‐
6053 cording to the conditions.
6054
6055 30 FTP PORT failed. The PORT command failed. Not all FTP servers
6056 support the PORT command, try doing a transfer using PASV in‐
6057 stead!
6058
6059 31 FTP could not use REST. The REST command failed. This command is
6060 used for resumed FTP transfers.
6061
6062 33 HTTP range error. The range "command" did not work.
6063
6064 34 HTTP post error. Internal post-request generation error.
6065
6066 35 SSL connect error. The SSL handshaking failed.
6067
6068 36 Bad download resume. Could not continue an earlier aborted down‐
6069 load.
6070
6071 37 FILE could not read file. Failed to open the file. Permissions?
6072
6073 38 LDAP cannot bind. LDAP bind operation failed.
6074
6075 39 LDAP search failed.
6076
6077 41 Function not found. A required LDAP function was not found.
6078
6079 42 Aborted by callback. An application told curl to abort the oper‐
6080 ation.
6081
6082 43 Internal error. A function was called with a bad parameter.
6083
6084 45 Interface error. A specified outgoing interface could not be
6085 used.
6086
6087 47 Too many redirects. When following redirects, curl hit the maxi‐
6088 mum amount.
6089
6090 48 Unknown option specified to libcurl. This indicates that you
6091 passed a weird option to curl that was passed on to libcurl and
6092 rejected. Read up in the manual!
6093
6094 49 Malformed telnet option.
6095
6096 52 The server did not reply anything, which here is considered an
6097 error.
6098
6099 53 SSL crypto engine not found.
6100
6101 54 Cannot set SSL crypto engine as default.
6102
6103 55 Failed sending network data.
6104
6105 56 Failure in receiving network data.
6106
6107 58 Problem with the local certificate.
6108
6109 59 Could not use specified SSL cipher.
6110
6111 60 Peer certificate cannot be authenticated with known CA certifi‐
6112 cates.
6113
6114 61 Unrecognized transfer encoding.
6115
6116 63 Maximum file size exceeded.
6117
6118 64 Requested FTP SSL level failed.
6119
6120 65 Sending the data requires a rewind that failed.
6121
6122 66 Failed to initialise SSL Engine.
6123
6124 67 The user name, password, or similar was not accepted and curl
6125 failed to log in.
6126
6127 68 File not found on TFTP server.
6128
6129 69 Permission problem on TFTP server.
6130
6131 70 Out of disk space on TFTP server.
6132
6133 71 Illegal TFTP operation.
6134
6135 72 Unknown TFTP transfer ID.
6136
6137 73 File already exists (TFTP).
6138
6139 74 No such user (TFTP).
6140
6141 77 Problem reading the SSL CA cert (path? access rights?).
6142
6143 78 The resource referenced in the URL does not exist.
6144
6145 79 An unspecified error occurred during the SSH session.
6146
6147 80 Failed to shut down the SSL connection.
6148
6149 82 Could not load CRL file, missing or wrong format.
6150
6151 83 Issuer check failed.
6152
6153 84 The FTP PRET command failed.
6154
6155 85 Mismatch of RTSP CSeq numbers.
6156
6157 86 Mismatch of RTSP Session Identifiers.
6158
6159 87 Unable to parse FTP file list.
6160
6161 88 FTP chunk callback reported error.
6162
6163 89 No connection available, the session will be queued.
6164
6165 90 SSL public key does not matched pinned public key.
6166
6167 91 Invalid SSL certificate status.
6168
6169 92 Stream error in HTTP/2 framing layer.
6170
6171 93 An API function was called from inside a callback.
6172
6173 94 An authentication function returned an error.
6174
6175 95 A problem was detected in the HTTP/3 layer. This is somewhat
6176 generic and can be one out of several problems, see the error
6177 message for details.
6178
6179 96 QUIC connection error. This error may be caused by an SSL li‐
6180 brary error. QUIC is the protocol used for HTTP/3 transfers.
6181
6182 97 Proxy handshake error.
6183
6184 98 A client-side certificate is required to complete the TLS hand‐
6185 shake.
6186
6187 99 Poll or select returned fatal error.
6188
6189 XX More error codes will appear here in future releases. The exist‐
6190 ing ones are meant to never change.
6191
6193 If you experience any problems with curl, submit an issue in the
6194 project's bug tracker on GitHub: https://github.com/curl/curl/issues
6195
6197 Daniel Stenberg is the main author, but the whole list of contributors
6198 is found in the separate THANKS file.
6199
6201 https://curl.se
6202
6204 ftp(1), wget(1)
6205
6206
6207
6208curl 8.2.1 July 25 2023 curl(1)