1curl(1) Curl Manual curl(1)
2
3
4
6 curl - transfer a URL
7
9 curl [options] [URL...]
10
12 curl is a tool to transfer data from or to a server, using one of the
13 supported protocols (HTTP, HTTPS, FTP, FTPS, SCP, SFTP, TFTP, DICT,
14 TELNET, LDAP or FILE). The command is designed to work without user
15 interaction.
16
17 curl offers a busload of useful tricks like proxy support, user authen‐
18 tication, FTP upload, HTTP post, SSL connections, cookies, file trans‐
19 fer resume and more. As you will see below, the number of features will
20 make your head spin!
21
22 curl is powered by libcurl for all transfer-related features. See
23 libcurl(3) for details.
24
26 The URL syntax is protocol-dependent. You'll find a detailed descrip‐
27 tion in RFC 3986.
28
29 You can specify multiple URLs or parts of URLs by writing part sets
30 within braces as in:
31
32 http://site.{one,two,three}.com
33
34 or you can get sequences of alphanumeric series by using [] as in:
35
36 ftp://ftp.numericals.com/file[1-100].txt
37 ftp://ftp.numericals.com/file[001-100].txt (with leading zeros)
38 ftp://ftp.letters.com/file[a-z].txt
39
40 No nesting of the sequences is supported at the moment, but you can use
41 several ones next to each other:
42
43 http://any.org/archive[1996-1999]/vol[1-4]/part{a,b,c}.html
44
45 You can specify any amount of URLs on the command line. They will be
46 fetched in a sequential manner in the specified order.
47
48 Since curl 7.15.1 you can also specify a step counter for the ranges,
49 so that you can get every Nth number or letter:
50
51 http://www.numericals.com/file[1-100:10].txt
52 http://www.letters.com/file[a-z:2].txt
53
54 If you specify URL without protocol:// prefix, curl will attempt to
55 guess what protocol you might want. It will then default to HTTP but
56 try other protocols based on often-used host name prefixes. For exam‐
57 ple, for host names starting with "ftp." curl will assume you want to
58 speak FTP.
59
60 curl will do its best to use what you pass to it as a URL. It is not
61 trying to validate it as a syntactically correct URL by any means but
62 is instead very liberal with what it accepts.
63
64 Curl will attempt to re-use connections for multiple file transfers, so
65 that getting many files from the same server will not do multiple con‐
66 nects / handshakes. This improves speed. Of course this is only done on
67 files specified on a single command line and cannot be used between
68 separate curl invokes.
69
71 curl normally displays a progress meter during operations, indicating
72 the amount of transferred data, transfer speeds and estimated time
73 left, etc.
74
75 However, since curl displays this data to the terminal by default, if
76 you invoke curl to do an operation and it is about to write data to the
77 terminal, it disables the progress meter as otherwise it would mess up
78 the output mixing progress meter and response data.
79
80 If you want a progress meter for HTTP POST or PUT requests, you need to
81 redirect the response output to a file, using shell redirect (>), -o
82 [file] or similar.
83
84 It is not the same case for FTP upload as that operation does not spit
85 out any response data to the terminal.
86
87 If you prefer a progress "bar" instead of the regular meter, -# is your
88 friend.
89
91 In general, all boolean options are enabled with --option and yet again
92 disabled with --no-option. That is, you use the exact same option name
93 but prefix it with "no-". However, in this list we mostly only list and
94 show the --option version of them. (This concept with --no options was
95 added in 7.19.0. Previously most options were toggled on/off on
96 repeated use of the same command line option.)
97
98 -a/--append
99 (FTP/SFTP) When used in an upload, this will tell curl to append
100 to the target file instead of overwriting it. If the file
101 doesn't exist, it will be created. Note that this flag is
102 ignored by some SSH servers (including OpenSSH).
103
104 -A/--user-agent <agent string>
105 (HTTP) Specify the User-Agent string to send to the HTTP server.
106 Some badly done CGIs fail if this field isn't set to
107 "Mozilla/4.0". To encode blanks in the string, surround the
108 string with single quote marks. This can also be set with the
109 -H/--header option of course.
110
111 If this option is set more than once, the last one will be the
112 one that's used.
113
114 --anyauth
115 (HTTP) Tells curl to figure out authentication method by itself,
116 and use the most secure one the remote site claims to support.
117 This is done by first doing a request and checking the response-
118 headers, thus possibly inducing an extra network round-trip.
119 This is used instead of setting a specific authentication
120 method, which you can do with --basic, --digest, --ntlm, and
121 --negotiate.
122
123 Note that using --anyauth is not recommended if you do uploads
124 from stdin, since it may require data to be sent twice and then
125 the client must be able to rewind. If the need should arise when
126 uploading from stdin, the upload operation will fail.
127
128 -b/--cookie <name=data>
129 (HTTP) Pass the data to the HTTP server as a cookie. It is sup‐
130 posedly the data previously received from the server in a "Set-
131 Cookie:" line. The data should be in the format "NAME1=VALUE1;
132 NAME2=VALUE2".
133
134 If no '=' symbol is used in the line, it is treated as a file‐
135 name to use to read previously stored cookie lines from, which
136 should be used in this session if they match. Using this method
137 also activates the "cookie parser" which will make curl record
138 incoming cookies too, which may be handy if you're using this in
139 combination with the -L/--location option. The file format of
140 the file to read cookies from should be plain HTTP headers or
141 the Netscape/Mozilla cookie file format.
142
143 NOTE that the file specified with -b/--cookie is only used as
144 input. No cookies will be stored in the file. To store cookies,
145 use the -c/--cookie-jar option or you could even save the HTTP
146 headers to a file using -D/--dump-header!
147
148 If this option is set more than once, the last one will be the
149 one that's used.
150
151 -B/--use-ascii
152 Enable ASCII transfer when using FTP or LDAP. For FTP, this can
153 also be enforced by using an URL that ends with ";type=A". This
154 option causes data sent to stdout to be in text mode for win32
155 systems.
156
157 --basic
158 (HTTP) Tells curl to use HTTP Basic authentication. This is the
159 default and this option is usually pointless, unless you use it
160 to override a previously set option that sets a different
161 authentication method (such as --ntlm, --digest, or --negoti‐
162 ate).
163
164 --ciphers <list of ciphers>
165 (SSL) Specifies which ciphers to use in the connection. The list
166 of ciphers must specify valid ciphers. Read up on SSL cipher
167 list details on this URL:
168 http://www.openssl.org/docs/apps/ciphers.html
169
170 NSS ciphers are done differently than OpenSSL and GnuTLS. The
171 full list of NSS ciphers is in the NSSCipherSuite entry at this
172 URL: http://git.fedora‐
173 hosted.org/cgit/mod_nss.git/plain/docs/mod_nss.html#Directives
174
175 If this option is used several times, the last one will override
176 the others.
177
178 --compressed
179 (HTTP) Request a compressed response using one of the algorithms
180 libcurl supports, and return the uncompressed document. If this
181 option is used and the server sends an unsupported encoding,
182 curl will report an error.
183
184 --connect-timeout <seconds>
185 Maximum time in seconds that you allow the connection to the
186 server to take. This only limits the connection phase, once
187 curl has connected this option is of no more use. See also the
188 -m/--max-time option.
189
190 If this option is used several times, the last one will be used.
191
192 -c/--cookie-jar <file name>
193 Specify to which file you want curl to write all cookies after a
194 completed operation. Curl writes all cookies previously read
195 from a specified file as well as all cookies received from
196 remote server(s). If no cookies are known, no file will be writ‐
197 ten. The file will be written using the Netscape cookie file
198 format. If you set the file name to a single dash, "-", the
199 cookies will be written to stdout.
200
201 NOTE If the cookie jar can't be created or written to, the whole
202 curl operation won't fail or even report an error clearly. Using
203 -v will get a warning displayed, but that is the only visible
204 feedback you get about this possibly lethal situation.
205
206 If this option is used several times, the last specified file
207 name will be used.
208
209 -C/--continue-at <offset>
210 Continue/Resume a previous file transfer at the given offset.
211 The given offset is the exact number of bytes that will be
212 skipped, counting from the beginning of the source file before
213 it is transferred to the destination. If used with uploads, the
214 FTP server command SIZE will not be used by curl.
215
216 Use "-C -" to tell curl to automatically find out where/how to
217 resume the transfer. It then uses the given output/input files
218 to figure that out.
219
220 If this option is used several times, the last one will be used.
221
222 --create-dirs
223 When used in conjunction with the -o option, curl will create
224 the necessary local directory hierarchy as needed. This option
225 creates the dirs mentioned with the -o option, nothing else. If
226 the -o file name uses no dir or if the dirs it mentions already
227 exist, no dir will be created.
228
229 To create remote directories when using FTP or SFTP, try --ftp-
230 create-dirs.
231
232 --crlf (FTP) Convert LF to CRLF in upload. Useful for MVS (OS/390).
233
234 --crlfile <file>
235 (HTTPS/FTPS) Provide a file using PEM format with a Certificate
236 Revocation List that may specify peer certificates that are to
237 be considered revoked.
238
239 If this option is used several times, the last one will be used.
240
241 (Added in 7.19.7)
242
243 -d/--data <data>
244 (HTTP) Sends the specified data in a POST request to the HTTP
245 server, in the same way that a browser does when a user has
246 filled in an HTML form and presses the submit button. This will
247 cause curl to pass the data to the server using the content-type
248 application/x-www-form-urlencoded. Compare to -F/--form.
249
250 -d/--data is the same as --data-ascii. To post data purely
251 binary, you should instead use the --data-binary option. To URL-
252 encode the value of a form field you may use --data-urlencode.
253
254 If any of these options is used more than once on the same com‐
255 mand line, the data pieces specified will be merged together
256 with a separating &-symbol. Thus, using '-d name=daniel -d
257 skill=lousy' would generate a post chunk that looks like
258 'name=daniel&skill=lousy'.
259
260 If you start the data with the letter @, the rest should be a
261 file name to read the data from, or - if you want curl to read
262 the data from stdin. The contents of the file must already be
263 URL-encoded. Multiple files can also be specified. Posting data
264 from a file named 'foobar' would thus be done with --data @foo‐
265 bar.
266
267 --data-binary <data>
268 (HTTP) This posts data exactly as specified with no extra pro‐
269 cessing whatsoever.
270
271 If you start the data with the letter @, the rest should be a
272 filename. Data is posted in a similar manner as --data-ascii
273 does, except that newlines are preserved and conversions are
274 never done.
275
276 If this option is used several times, the ones following the
277 first will append data as described in -d/--data.
278
279 --data-urlencode <data>
280 (HTTP) This posts data, similar to the other --data options with
281 the exception that this performs URL-encoding. (Added in 7.18.0)
282
283 To be CGI-compliant, the <data> part should begin with a name
284 followed by a separator and a content specification. The <data>
285 part can be passed to curl using one of the following syntaxes:
286
287 content
288 This will make curl URL-encode the content and pass that
289 on. Just be careful so that the content doesn't contain
290 any = or @ symbols, as that will then make the syntax
291 match one of the other cases below!
292
293 =content
294 This will make curl URL-encode the content and pass that
295 on. The preceding = symbol is not included in the data.
296
297 name=content
298 This will make curl URL-encode the content part and pass
299 that on. Note that the name part is expected to be URL-
300 encoded already.
301
302 @filename
303 This will make curl load data from the given file
304 (including any newlines), URL-encode that data and pass
305 it on in the POST.
306
307 name@filename
308 This will make curl load data from the given file
309 (including any newlines), URL-encode that data and pass
310 it on in the POST. The name part gets an equal sign
311 appended, resulting in name=urlencoded-file-content. Note
312 that the name is expected to be URL-encoded already.
313
314 --delegation LEVEL
315 Set LEVEL to tell the server what it is allowed to delegate when
316 it comes to user credentials. Used with GSS/kerberos.
317
318 none Don't allow any delegation.
319
320 policy Delegates if and only if the OK-AS-DELEGATE flag is set
321 in the Kerberos service ticket, which is a matter of
322 realm policy.
323
324 always Unconditionally allow the server to delegate.
325
326 --digest
327 (HTTP) Enables HTTP Digest authentication. This is a authentica‐
328 tion that prevents the password from being sent over the wire in
329 clear text. Use this in combination with the normal -u/--user
330 option to set user name and password. See also --ntlm, --negoti‐
331 ate and --anyauth for related options.
332
333 If this option is used several times, the following occurrences
334 make no difference.
335
336 --disable-eprt
337 (FTP) Tell curl to disable the use of the EPRT and LPRT commands
338 when doing active FTP transfers. Curl will normally always first
339 attempt to use EPRT, then LPRT before using PORT, but with this
340 option, it will use PORT right away. EPRT and LPRT are exten‐
341 sions to the original FTP protocol, and may not work on all
342 servers, but they enable more functionality in a better way than
343 the traditional PORT command.
344
345 Since curl 7.19.0, --eprt can be used to explicitly enable EPRT
346 again and --no-eprt is an alias for --disable-eprt.
347
348 Disabling EPRT only changes the active behavior. If you want to
349 switch to passive mode you need to not use -P/--ftp-port or
350 force it with --ftp-pasv.
351
352 --disable-epsv
353 (FTP) Tell curl to disable the use of the EPSV command when
354 doing passive FTP transfers. Curl will normally always first
355 attempt to use EPSV before PASV, but with this option, it will
356 not try using EPSV.
357
358 Since curl 7.19.0, --epsv can be used to explicitly enable EPRT
359 again and --no-epsv is an alias for --disable-epsv.
360
361 Disabling EPSV only changes the passive behavior. If you want to
362 switch to active mode you need to use -P/--ftp-port.
363
364 -D/--dump-header <file>
365 Write the protocol headers to the specified file.
366
367 This option is handy to use when you want to store the headers
368 that a HTTP site sends to you. Cookies from the headers could
369 then be read in a second curl invocation by using the
370 -b/--cookie option! The -c/--cookie-jar option is however a bet‐
371 ter way to store cookies.
372
373 When used in FTP, the FTP server response lines are considered
374 being "headers" and thus are saved there.
375
376 If this option is used several times, the last one will be used.
377
378 -e/--referer <URL>
379 (HTTP) Sends the "Referer Page" information to the HTTP server.
380 This can also be set with the -H/--header flag of course. When
381 used with -L/--location you can append ";auto" to the --referer
382 URL to make curl automatically set the previous URL when it fol‐
383 lows a Location: header. The ";auto" string can be used alone,
384 even if you don't set an initial --referer.
385
386 If this option is used several times, the last one will be used.
387
388 --engine <name>
389 Select the OpenSSL crypto engine to use for cipher operations.
390 Use --engine list to print a list of build-time supported
391 engines. Note that not all (or none) of the engines may be
392 available at run-time.
393
394 --environment
395 (RISC OS ONLY) Sets a range of environment variables, using the
396 names the -w option supports, to allow easier extraction of use‐
397 ful information after having run curl.
398
399 --egd-file <file>
400 (SSL) Specify the path name to the Entropy Gathering Daemon
401 socket. The socket is used to seed the random engine for SSL
402 connections. See also the --random-file option.
403
404 -E/--cert <certificate[:password]>
405 (SSL) Tells curl to use the specified certificate file when get‐
406 ting a file with HTTPS or FTPS. The certificate must be in PEM
407 format. If the optional password isn't specified, it will be
408 queried for on the terminal. Note that this option assumes a
409 "certificate" file that is the private key and the private cer‐
410 tificate concatenated! See --cert and --key to specify them
411 independently.
412
413 If curl is built against the NSS SSL library then this option
414 can tell curl the nickname of the certificate to use within the
415 NSS database defined by the environment variable SSL_DIR (or by
416 default /etc/pki/nssdb). If the NSS PEM PKCS#11 module (lib‐
417 nsspem.so) is available then PEM files may be loaded. If you
418 want to use a file from the current directory, please precede it
419 with "./" prefix, in order to avoid confusion with a nickname.
420
421 If this option is used several times, the last one will be used.
422
423 --cert-type <type>
424 (SSL) Tells curl what certificate type the provided certificate
425 is in. PEM, DER and ENG are recognized types. If not specified,
426 PEM is assumed.
427
428 If this option is used several times, the last one will be used.
429
430 --cacert <CA certificate>
431 (SSL) Tells curl to use the specified certificate file to verify
432 the peer. The file may contain multiple CA certificates. The
433 certificate(s) must be in PEM format. Normally curl is built to
434 use a default file for this, so this option is typically used to
435 alter that default file.
436
437 curl recognizes the environment variable named 'CURL_CA_BUNDLE'
438 if it is set, and uses the given path as a path to a CA cert
439 bundle. This option overrides that variable.
440
441 The windows version of curl will automatically look for a CA
442 certs file named ´curl-ca-bundle.crt´, either in the same direc‐
443 tory as curl.exe, or in the Current Working Directory, or in any
444 folder along your PATH.
445
446 If curl is built against the NSS SSL library, the NSS PEM
447 PKCS#11 module (libnsspem.so) needs to be available for this
448 option to work properly.
449
450 If this option is used several times, the last one will be used.
451
452 --capath <CA certificate directory>
453 (SSL) Tells curl to use the specified certificate directory to
454 verify the peer. The certificates must be in PEM format.
455
456 If this option is used several times, the last one will be used.
457
458 -f/--fail
459 (HTTP) Fail silently (no output at all) on server errors. This
460 is mostly done to better enable scripts etc to better deal with
461 failed attempts. In normal cases when a HTTP server fails to
462 deliver a document, it returns an HTML document stating so
463 (which often also describes why and more). This flag will pre‐
464 vent curl from outputting that and return error 22.
465
466 This method is not fail-safe and there are occasions where non-
467 successful response codes will slip through, especially when
468 authentication is involved (response codes 401 and 407).
469
470 --ftp-account [data]
471 (FTP) When an FTP server asks for "account data" after user name
472 and password has been provided, this data is sent off using the
473 ACCT command. (Added in 7.13.0)
474
475 If this option is used twice, the second will override the pre‐
476 vious use.
477
478 --ftp-create-dirs
479 (FTP/SFTP) When an FTP or SFTP URL/operation uses a path that
480 doesn't currently exist on the server, the standard behavior of
481 curl is to fail. Using this option, curl will instead attempt to
482 create missing directories.
483
484 --ftp-method [method]
485 (FTP) Control what method curl should use to reach a file on a
486 FTP(S) server. The method argument should be one of the follow‐
487 ing alternatives:
488
489 multicwd
490 curl does a single CWD operation for each path part in
491 the given URL. For deep hierarchies this means very many
492 commands. This is how RFC1738 says it should be done.
493 This is the default but the slowest behavior.
494
495 nocwd curl does no CWD at all. curl will do SIZE, RETR, STOR
496 etc and give a full path to the server for all these com‐
497 mands. This is the fastest behavior.
498
499 singlecwd
500 curl does one CWD with the full target directory and then
501 operates on the file "normally" (like in the multicwd
502 case). This is somewhat more standards compliant than
503 'nocwd' but without the full penalty of 'multicwd'.
504 (Added in 7.15.1)
505
506 --ftp-pasv
507 (FTP) Use passive mode for the data connection. Passive is the
508 internal default behavior, but using this option can be used to
509 override a previous -P/-ftp-port option. (Added in 7.11.0)
510
511 If this option is used several times, the following occurrences
512 make no difference. Undoing an enforced passive really isn't
513 doable but you must then instead enforce the correct -P/--ftp-
514 port again.
515
516 Passive mode means that curl will try the EPSV command first and
517 then PASV, unless --disable-epsv is used.
518
519 --ftp-alternative-to-user <command>
520 (FTP) If authenticating with the USER and PASS commands fails,
521 send this command. When connecting to Tumbleweed's Secure
522 Transport server over FTPS using a client certificate, using
523 "SITE AUTH" will tell the server to retrieve the username from
524 the certificate. (Added in 7.15.5)
525
526 --ftp-skip-pasv-ip
527 (FTP) Tell curl to not use the IP address the server suggests in
528 its response to curl's PASV command when curl connects the data
529 connection. Instead curl will re-use the same IP address it
530 already uses for the control connection. (Added in 7.14.2)
531
532 This option has no effect if PORT, EPRT or EPSV is used instead
533 of PASV.
534
535 --ftp-ssl
536 (FTP) Try to use SSL/TLS for the FTP connection. Reverts to a
537 non-secure connection if the server doesn't support SSL/TLS.
538 See also --ftp-ssl-control and --ftp-ssl-reqd for different lev‐
539 els of encryption required. (Added in 7.11.0)
540
541 --ftp-ssl-control
542 (FTP) Require SSL/TLS for the FTP login, clear for transfer.
543 Allows secure authentication, but non-encrypted data transfers
544 for efficiency. Fails the transfer if the server doesn't sup‐
545 port SSL/TLS. (Added in 7.16.0)
546
547 --ftp-ssl-reqd
548 (FTP) Require SSL/TLS for the FTP connection. Terminates the
549 connection if the server doesn't support SSL/TLS. (Added in
550 7.15.5)
551
552 --ftp-ssl-ccc
553 (FTP) Use CCC (Clear Command Channel) Shuts down the SSL/TLS
554 layer after authenticating. The rest of the control channel com‐
555 munication will be unencrypted. This allows NAT routers to fol‐
556 low the FTP transaction. The default mode is passive. See --ftp-
557 ssl-ccc-mode for other modes. (Added in 7.16.1)
558
559 --ftp-ssl-ccc-mode [active/passive]
560 (FTP) Use CCC (Clear Command Channel) Sets the CCC mode. The
561 passive mode will not initiate the shutdown, but instead wait
562 for the server to do it, and will not reply to the shutdown from
563 the server. The active mode initiates the shutdown and waits for
564 a reply from the server. (Added in 7.16.2)
565
566 -F/--form <name=content>
567 (HTTP) This lets curl emulate a filled-in form in which a user
568 has pressed the submit button. This causes curl to POST data
569 using the Content-Type multipart/form-data according to RFC2388.
570 This enables uploading of binary files etc. To force the 'con‐
571 tent' part to be a file, prefix the file name with an @ sign. To
572 just get the content part from a file, prefix the file name with
573 the symbol <. The difference between @ and < is then that @
574 makes a file get attached in the post as a file upload, while
575 the < makes a text field and just get the contents for that text
576 field from a file.
577
578 Example, to send your password file to the server, where 'pass‐
579 word' is the name of the form-field to which /etc/passwd will be
580 the input:
581
582 curl -F password=@/etc/passwd www.mypasswords.com
583
584 To read the file's content from stdin instead of a file, use -
585 where the file name should've been. This goes for both @ and <
586 constructs.
587
588 You can also tell curl what Content-Type to use by using
589 'type=', in a manner similar to:
590
591 curl -F "web=@index.html;type=text/html" url.com
592
593 or
594
595 curl -F "name=daniel;type=text/foo" url.com
596
597 You can also explicitly change the name field of an file upload
598 part by setting filename=, like this:
599
600 curl -F "file=@localfile;filename=nameinpost" url.com
601
602 See further examples and details in the MANUAL.
603
604 This option can be used multiple times.
605
606 --form-string <name=string>
607 (HTTP) Similar to --form except that the value string for the
608 named parameter is used literally. Leading '@' and '<' charac‐
609 ters, and the ';type=' string in the value have no special mean‐
610 ing. Use this in preference to --form if there's any possibility
611 that the string value may accidentally trigger the '@' or '<'
612 features of --form.
613
614 -g/--globoff
615 This option switches off the "URL globbing parser". When you set
616 this option, you can specify URLs that contain the letters {}[]
617 without having them being interpreted by curl itself. Note that
618 these letters are not normal legal URL contents but they should
619 be encoded according to the URI standard.
620
621 -G/--get
622 When used, this option will make all data specified with
623 -d/--data or --data-binary to be used in a HTTP GET request
624 instead of the POST request that otherwise would be used. The
625 data will be appended to the URL with a '?' separator.
626
627 If used in combination with -I, the POST data will instead be
628 appended to the URL with a HEAD request.
629
630 If this option is used several times, the following occurrences
631 make no difference. This is because undoing a GET doesn't make
632 sense, but you should then instead enforce the alternative
633 method you prefer.
634
635 -h/--help
636 Usage help.
637
638 -H/--header <header>
639 (HTTP) Extra header to use when getting a web page. You may
640 specify any number of extra headers. Note that if you should add
641 a custom header that has the same name as one of the internal
642 ones curl would use, your externally set header will be used
643 instead of the internal one. This allows you to make even trick‐
644 ier stuff than curl would normally do. You should not replace
645 internally set headers without knowing perfectly well what
646 you're doing. Remove an internal header by giving a replacement
647 without content on the right side of the colon, as in: -H
648 "Host:".
649
650 curl will make sure that each header you add/replace is sent
651 with the proper end-of-line marker, you should thus not add that
652 as a part of the header content: do not add newlines or carriage
653 returns, they will only mess things up for you.
654
655 See also the -A/--user-agent and -e/--referer options.
656
657 This option can be used multiple times to add/replace/remove
658 multiple headers.
659
660 --hostpubmd5 <md5>
661 Pass a string containing 32 hexadecimal digits. The string
662 should be the 128 bit MD5 checksum of the remote host's public
663 key, curl will refuse the connection with the host unless the
664 md5sums match. This option is only for SCP and SFTP transfers.
665 (Added in 7.17.1)
666
667 --ignore-content-length
668 (HTTP) Ignore the Content-Length header. This is particularly
669 useful for servers running Apache 1.x, which will report incor‐
670 rect Content-Length for files larger than 2 gigabytes.
671
672 -i/--include
673 (HTTP) Include the HTTP-header in the output. The HTTP-header
674 includes things like server-name, date of the document, HTTP-
675 version and more...
676
677 --interface <name>
678 Perform an operation using a specified interface. You can enter
679 interface name, IP address or host name. An example could look
680 like:
681
682 curl --interface eth0:1 http://www.netscape.com/
683
684 If this option is used several times, the last one will be used.
685
686 -I/--head
687 (HTTP/FTP/FILE) Fetch the HTTP-header only! HTTP-servers feature
688 the command HEAD which this uses to get nothing but the header
689 of a document. When used on a FTP or FILE file, curl displays
690 the file size and last modification time only.
691
692 -j/--junk-session-cookies
693 (HTTP) When curl is told to read cookies from a given file, this
694 option will make it discard all "session cookies". This will
695 basically have the same effect as if a new session is started.
696 Typical browsers always discard session cookies when they're
697 closed down.
698
699 -k/--insecure
700 (SSL) This option explicitly allows curl to perform "insecure"
701 SSL connections and transfers. All SSL connections are attempted
702 to be made secure by using the CA certificate bundle installed
703 by default. This makes all connections considered "insecure"
704 fail unless -k/--insecure is used.
705
706 See this online resource for further details:
707 http://curl.haxx.se/docs/sslcerts.html
708
709 --keepalive-time <seconds>
710 This option sets the time a connection needs to remain idle
711 before sending keepalive probes and the time between individual
712 keepalive probes. It is currently effective on operating systems
713 offering the TCP_KEEPIDLE and TCP_KEEPINTVL socket options
714 (meaning Linux, recent AIX, HP-UX and more). This option has no
715 effect if --no-keepalive is used. (Added in 7.18.0)
716
717 If this option is used multiple times, the last occurrence sets
718 the amount.
719
720 --key <key>
721 (SSL/SSH) Private key file name. Allows you to provide your pri‐
722 vate key in this separate file. For SSH, if not specified, curl
723 tries the following candidates in order: '~/.ssh/id_rsa',
724 '~/.ssh/id_dsa', './id_rsa', './id_dsa'.
725
726 If this option is used several times, the last one will be used.
727
728 --key-type <type>
729 (SSL) Private key file type. Specify which type your --key pro‐
730 vided private key is. DER, PEM, and ENG are supported. If not
731 specified, PEM is assumed.
732
733 If this option is used several times, the last one will be used.
734
735 --krb <level>
736 (FTP) Enable Kerberos authentication and use. The level must be
737 entered and should be one of 'clear', 'safe', 'confidential', or
738 'private'. Should you use a level that is not one of these,
739 'private' will instead be used.
740
741 This option requires a library built with kerberos4 or GSSAPI
742 (GSS-Negotiate) support. This is not very common. Use -V/--ver‐
743 sion to see if your curl supports it.
744
745 If this option is used several times, the last one will be used.
746
747 -K/--config <config file>
748 Specify which config file to read curl arguments from. The con‐
749 fig file is a text file in which command line arguments can be
750 written which then will be used as if they were written on the
751 actual command line. Options and their parameters must be speci‐
752 fied on the same config file line, separated by whitespace,
753 colon, the equals sign or any combination thereof (however, the
754 preferred separator is the equals sign). If the parameter is to
755 contain whitespace, the parameter must be enclosed within
756 quotes. Within double quotes, the following escape sequences are
757 available: \\, \", \t, \n, \r and \v. A backslash preceding any
758 other letter is ignored. If the first column of a config line is
759 a '#' character, the rest of the line will be treated as a com‐
760 ment. Only write one option per physical line in the config
761 file.
762
763 Specify the filename to -K/--config as '-' to make curl read the
764 file from stdin.
765
766 Note that to be able to specify a URL in the config file, you
767 need to specify it using the --url option, and not by simply
768 writing the URL on its own line. So, it could look similar to
769 this:
770
771 url = "http://curl.haxx.se/docs/"
772
773 Long option names can optionally be given in the config file
774 without the initial double dashes.
775
776 When curl is invoked, it always (unless -q is used) checks for a
777 default config file and uses it if found. The default config
778 file is checked for in the following places in this order:
779
780 1) curl tries to find the "home dir": It first checks for the
781 CURL_HOME and then the HOME environment variables. Failing that,
782 it uses getpwuid() on UNIX-like systems (which returns the home
783 dir given the current user in your system). On Windows, it then
784 checks for the APPDATA variable, or as a last resort the '%USER‐
785 PROFILE%\Application Data'.
786
787 2) On windows, if there is no _curlrc file in the home dir, it
788 checks for one in the same dir the curl executable is placed. On
789 UNIX-like systems, it will simply try to load .curlrc from the
790 determined home dir.
791
792 # --- Example file ---
793 # this is a comment
794 url = "curl.haxx.se"
795 output = "curlhere.html"
796 user-agent = "superagent/1.0"
797
798 # and fetch another URL too
799 url = "curl.haxx.se/docs/manpage.html"
800 -O
801 referer = "http://nowhereatall.com/"
802 # --- End of example file ---
803
804 This option can be used multiple times to load multiple config
805 files.
806
807 --libcurl <file>
808 Append this option to any ordinary curl command line, and you
809 will get a libcurl-using source code written to the file that
810 does the equivalent of what your command-line operation does!
811
812 NOTE: this does not properly support -F and the sending of mul‐
813 tipart formposts, so in those cases the output program will be
814 missing necessary calls to curl_formadd(3), and possibly more.
815
816 If this option is used several times, the last given file name
817 will be used. (Added in 7.16.1)
818
819 --limit-rate <speed>
820 Specify the maximum transfer rate you want curl to use. This
821 feature is useful if you have a limited pipe and you'd like your
822 transfer not to use your entire bandwidth.
823
824 The given speed is measured in bytes/second, unless a suffix is
825 appended. Appending 'k' or 'K' will count the number as kilo‐
826 bytes, 'm' or M' makes it megabytes, while 'g' or 'G' makes it
827 gigabytes. Examples: 200K, 3m and 1G.
828
829 The given rate is the average speed counted during the entire
830 transfer. It means that curl might use higher transfer speeds in
831 short bursts, but over time it uses no more than the given rate.
832
833 If you also use the -Y/--speed-limit option, that option will
834 take precedence and might cripple the rate-limiting slightly, to
835 help keeping the speed-limit logic working.
836
837 If this option is used several times, the last one will be used.
838
839 -l/--list-only
840 (FTP) When listing an FTP directory, this switch forces a name-
841 only view. Especially useful if you want to machine-parse the
842 contents of an FTP directory since the normal directory view
843 doesn't use a standard look or format.
844
845 This option causes an FTP NLST command to be sent. Some FTP
846 servers list only files in their response to NLST; they do not
847 include subdirectories and symbolic links.
848
849
850 --local-port <num>[-num]
851 Set a preferred number or range of local port numbers to use for
852 the connection(s). Note that port numbers by nature are a
853 scarce resource that will be busy at times so setting this range
854 to something too narrow might cause unnecessary connection setup
855 failures. (Added in 7.15.2)
856
857 -L/--location
858 (HTTP/HTTPS) If the server reports that the requested page has
859 moved to a different location (indicated with a Location: header
860 and a 3XX response code), this option will make curl redo the
861 request on the new place. If used together with -i/--include or
862 -I/--head, headers from all requested pages will be shown. When
863 authentication is used, curl only sends its credentials to the
864 initial host. If a redirect takes curl to a different host, it
865 won't be able to intercept the user+password. See also --loca‐
866 tion-trusted on how to change this. You can limit the amount of
867 redirects to follow by using the --max-redirs option.
868
869 When curl follows a redirect and the request is not a plain GET
870 (for example POST or PUT), it will do the following request with
871 a GET if the HTTP response was 301, 302, or 303. If the response
872 code was any other 3xx code, curl will re-send the following
873 request using the same unmodified method.
874
875 --location-trusted
876 (HTTP/HTTPS) Like -L/--location, but will allow sending the name
877 + password to all hosts that the site may redirect to. This may
878 or may not introduce a security breach if the site redirects you
879 to a site to which you'll send your authentication info (which
880 is plaintext in the case of HTTP Basic authentication).
881
882
883 --max-filesize <bytes>
884 Specify the maximum size (in bytes) of a file to download. If
885 the file requested is larger than this value, the transfer will
886 not start and curl will return with exit code 63.
887
888 NOTE: The file size is not always known prior to download, and
889 for such files this option has no effect even if the file trans‐
890 fer ends up being larger than this given limit. This concerns
891 both FTP and HTTP transfers.
892
893 -m/--max-time <seconds>
894 Maximum time in seconds that you allow the whole operation to
895 take. This is useful for preventing your batch jobs from hang‐
896 ing for hours due to slow networks or links going down. See
897 also the --connect-timeout option.
898
899 If this option is used several times, the last one will be used.
900
901 -M/--manual
902 Manual. Display the huge help text.
903
904 -n/--netrc
905 Makes curl scan the .netrc (_netrc on Windows) file in the
906 user's home directory for login name and password. This is typi‐
907 cally used for FTP on UNIX. If used with HTTP, curl will enable
908 user authentication. See netrc(4) or ftp(1) for details on the
909 file format. Curl will not complain if that file doesn't have
910 the right permissions (it should not be either world- or group-
911 readable). The environment variable "HOME" is used to find the
912 home directory.
913
914 A quick and very simple example of how to setup a .netrc to
915 allow curl to FTP to the machine host.domain.com with user name
916 'myself' and password 'secret' should look similar to:
917
918 machine host.domain.com login myself password secret
919
920 --netrc-optional
921 Very similar to --netrc, but this option makes the .netrc usage
922 optional and not mandatory as the --netrc option does.
923
924 --negotiate
925 (HTTP) Enables GSS-Negotiate authentication. The GSS-Negotiate
926 method was designed by Microsoft and is used in their web appli‐
927 cations. It is primarily meant as a support for Kerberos5
928 authentication but may be also used along with another authenti‐
929 cation method. For more information see IETF draft draft-brezak-
930 spnego-http-04.txt.
931
932 If you want to enable Negotiate for your proxy authentication,
933 then use --proxy-negotiate.
934
935 This option requires a library built with GSSAPI support. This
936 is not very common. Use -V/--version to see if your version sup‐
937 ports GSS-Negotiate.
938
939 When using this option, you must also provide a fake -u/--user
940 option to activate the authentication code properly. Sending a
941 '-u :' is enough as the user name and password from the -u
942 option aren't actually used.
943
944 If this option is used several times, the following occurrences
945 make no difference.
946
947 -N/--no-buffer
948 Disables the buffering of the output stream. In normal work sit‐
949 uations, curl will use a standard buffered output stream that
950 will have the effect that it will output the data in chunks, not
951 necessarily exactly when the data arrives. Using this option
952 will disable that buffering.
953
954 Note that this is the negated option name documented. You can
955 thus use --buffer to enforce the buffering.
956
957 --no-keepalive
958 Disables the use of keepalive messages on the TCP connection, as
959 by default curl enables them.
960
961 Note that this is the negated option name documented. You can
962 thus use --keepalive to enforce keepalive.
963
964 --no-sessionid
965 (SSL) Disable curl's use of SSL session-ID caching. By default
966 all transfers are done using the cache. Note that while nothing
967 should ever get hurt by attempting to reuse SSL session-IDs,
968 there seem to be broken SSL implementations in the wild that may
969 require you to disable this in order for you to succeed. (Added
970 in 7.16.0)
971
972 Note that this is the negated option name documented. You can
973 thus use --sessionid to enforce session-ID caching.
974
975 --noproxy <no-proxy-list>
976 Comma-separated list of hosts which do not use a proxy, if one
977 is specified. The only wildcard is a single * character, which
978 matches all hosts, and effectively disables the proxy. Each name
979 in this list is matched as either a domain which contains the
980 hostname, or the hostname itself. For example, local.com would
981 match local.com, local.com:80, and www.local.com, but not
982 www.notlocal.com. (Added in 7.19.4).
983
984 --ntlm (HTTP) Enables NTLM authentication. The NTLM authentication
985 method was designed by Microsoft and is used by IIS web servers.
986 It is a proprietary protocol, reverse-engineered by clever peo‐
987 ple and implemented in curl based on their efforts. This kind of
988 behavior should not be endorsed, you should encourage everyone
989 who uses NTLM to switch to a public and documented authentica‐
990 tion method instead, such as Digest.
991
992 If you want to enable NTLM for your proxy authentication, then
993 use --proxy-ntlm.
994
995 This option requires a library built with SSL support. Use
996 -V/--version to see if your curl supports NTLM.
997
998 If this option is used several times, the following occurrences
999 make no difference.
1000
1001 -o/--output <file>
1002 Write output to <file> instead of stdout. If you are using {} or
1003 [] to fetch multiple documents, you can use '#' followed by a
1004 number in the <file> specifier. That variable will be replaced
1005 with the current string for the URL being fetched. Like in:
1006
1007 curl http://{one,two}.site.com -o "file_#1.txt"
1008
1009 or use several variables like:
1010
1011 curl http://{site,host}.host[1-5].com -o "#1_#2"
1012
1013 You may use this option as many times as the number of URLs you
1014 have.
1015
1016 See also the --create-dirs option to create the local directo‐
1017 ries dynamically. Specifying the output as '-' (a single dash)
1018 will force the output to be done to stdout.
1019
1020 -O/--remote-name
1021 Write output to a local file named like the remote file we get.
1022 (Only the file part of the remote file is used, the path is cut
1023 off.)
1024
1025 The remote file name to use for saving is extracted from the
1026 given URL, nothing else.
1027
1028 You may use this option as many times as the number of URLs you
1029 have.
1030
1031 --remote-name-all
1032 This option changes the default action for all given URLs to be
1033 dealt with as if -O/--remote-name were used for each one. So if
1034 you want to disable that for a specific URL after --remote-name-
1035 all has been used, you must use "-o -" or --no-remote-name.
1036 (Added in 7.19.0)
1037
1038 --pass <phrase>
1039 (SSL/SSH) Passphrase for the private key
1040
1041 If this option is used several times, the last one will be used.
1042
1043 --post301
1044 Tells curl to respect RFC 2616/10.3.2 and not convert POST
1045 requests into GET requests when following a 301 redirection. The
1046 non-RFC behaviour is ubiquitous in web browsers, so curl does
1047 the conversion by default to maintain consistency. However, a
1048 server may require a POST to remain a POST after such a redi‐
1049 rection. This option is meaningful only when using -L/--location
1050 (Added in 7.17.1)
1051
1052 --post302
1053 Tells curl to respect RFC 2616/10.3.2 and not convert POST
1054 requests into GET requests when following a 302 redirection. The
1055 non-RFC behaviour is ubiquitous in web browsers, so curl does
1056 the conversion by default to maintain consistency. However, a
1057 server may require a POST to remain a POST after such a redi‐
1058 rection. This option is meaningful only when using -L/--location
1059 (Added in 7.19.1)
1060
1061 --proxy-anyauth
1062 Tells curl to pick a suitable authentication method when commu‐
1063 nicating with the given proxy. This might cause an extra
1064 request/response round-trip. (Added in 7.13.2)
1065
1066 --proxy-basic
1067 Tells curl to use HTTP Basic authentication when communicating
1068 with the given proxy. Use --basic for enabling HTTP Basic with a
1069 remote host. Basic is the default authentication method curl
1070 uses with proxies.
1071
1072 --proxy-digest
1073 Tells curl to use HTTP Digest authentication when communicating
1074 with the given proxy. Use --digest for enabling HTTP Digest with
1075 a remote host.
1076
1077 --proxy-negotiate
1078 Tells curl to use HTTP Negotiate authentication when communicat‐
1079 ing with the given proxy. Use --negotiate for enabling HTTP
1080 Negotiate with a remote host. (Added in 7.17.1)
1081
1082 --proxy-ntlm
1083 Tells curl to use HTTP NTLM authentication when communicating
1084 with the given proxy. Use --ntlm for enabling NTLM with a remote
1085 host.
1086
1087 --proxy1.0 <proxyhost[:port]>
1088 Use the specified HTTP 1.0 proxy. If the port number is not
1089 specified, it is assumed at port 1080.
1090
1091 The only difference between this and the HTTP proxy option
1092 (-x/--proxy), is that attempts to use CONNECT through the proxy
1093 will specify an HTTP 1.0 protocol instead of the default HTTP
1094 1.1.
1095
1096 -p/--proxytunnel
1097 When an HTTP proxy is used (-x/--proxy), this option will cause
1098 non-HTTP protocols to attempt to tunnel through the proxy
1099 instead of merely using it to do HTTP-like operations. The tun‐
1100 nel approach is made with the HTTP proxy CONNECT request and
1101 requires that the proxy allows direct connect to the remote port
1102 number curl wants to tunnel through to.
1103
1104 --pubkey <key>
1105 (SSH) Public key file name. Allows you to provide your public
1106 key in this separate file.
1107
1108 If this option is used several times, the last one will be used.
1109
1110 (As of 7.39.0, curl attempts to automatically extract the public
1111 key from the private key file, so passing this option is gener‐
1112 ally not required. Note that this public key extraction requires
1113 libcurl to be linked against a copy of libssh2 1.2.8 or higher
1114 that is itself linked against OpenSSL.)
1115
1116 -P/--ftp-port <address>
1117 (FTP) Reverses the default initiator/listener roles when con‐
1118 necting with FTP. This switch makes curl use active mode. In
1119 practice, curl then tells the server to connect back to the
1120 client's specified address and port, while passive mode asks the
1121 server to setup an IP address and port for it to connect to.
1122 <address> should be one of:
1123
1124 interface
1125 i.e "eth0" to specify which interface's IP address you
1126 want to use (Unix only)
1127
1128 IP address
1129 i.e "192.168.10.1" to specify the exact IP address
1130
1131 host name
1132 i.e "my.host.domain" to specify the machine
1133
1134 - make curl pick the same IP address that is already used
1135 for the control connection
1136
1137 If this option is used several times, the last one will be used. Dis‐
1138 able the use of PORT with --ftp-pasv. Disable the attempt to use the
1139 EPRT command instead of PORT by using --disable-eprt. EPRT is really
1140 PORT++.
1141
1142 Starting in 7.19.5, you can append ":[start]-[end]" to the right of the
1143 address, to tell curl what TCP port range to use. That means you spec‐
1144 ify a port range, from a lower to a higher number. A single number
1145 works as well, but do note that it increases the risk of failure since
1146 the port may not be available.
1147
1148 -q If used as the first parameter on the command line, the curlrc
1149 config file will not be read and used. See the -K/--config for
1150 details on the default config file search path.
1151
1152 -Q/--quote <command>
1153 (FTP/SFTP) Send an arbitrary command to the remote FTP or SFTP
1154 server. Quote commands are sent BEFORE the transfer takes place
1155 (just after the initial PWD command in an FTP transfer, to be
1156 exact). To make commands take place after a successful transfer,
1157 prefix them with a dash '-'. To make commands be sent after
1158 libcurl has changed the working directory, just before the
1159 transfer command(s), prefix the command with a '+' (this is only
1160 supported for FTP). You may specify any number of commands. If
1161 the server returns failure for one of the commands, the entire
1162 operation will be aborted. You must send syntactically correct
1163 FTP commands as RFC959 defines to FTP servers, or one of the
1164 commands listed below to SFTP servers. This option can be used
1165 multiple times.
1166
1167 SFTP is a binary protocol. Unlike for FTP, libcurl interprets
1168 SFTP quote commands before sending them to the server. Follow‐
1169 ing is the list of all supported SFTP quote commands:
1170
1171 chgrp group file
1172 The chgrp command sets the group ID of the file named by
1173 the file operand to the group ID specified by the group
1174 operand. The group operand is a decimal integer group ID.
1175
1176 chmod mode file
1177 The chmod command modifies the file mode bits of the
1178 specified file. The mode operand is an octal integer mode
1179 number.
1180
1181 chown user file
1182 The chown command sets the owner of the file named by the
1183 file operand to the user ID specified by the user oper‐
1184 and. The user operand is a decimal integer user ID.
1185
1186 ln source_file target_file
1187 The ln and symlink commands create a symbolic link at the
1188 target_file location pointing to the source_file loca‐
1189 tion.
1190
1191 mkdir directory_name
1192 The mkdir command creates the directory named by the
1193 directory_name operand.
1194
1195 pwd The pwd command returns the absolute pathname of the cur‐
1196 rent working directory.
1197
1198 rename source target
1199 The rename command renames the file or directory named by
1200 the source operand to the destination path named by the
1201 target operand.
1202
1203 rm file
1204 The rm command removes the file specified by the file op‐
1205 erand.
1206
1207 rmdir directory
1208 The rmdir command removes the directory entry specified
1209 by the directory operand, provided it is empty.
1210
1211 symlink source_file target_file
1212 See ln.
1213
1214 --random-file <file>
1215 (SSL) Specify the path name to file containing what will be con‐
1216 sidered as random data. The data is used to seed the random
1217 engine for SSL connections. See also the --egd-file option.
1218
1219 -r/--range <range>
1220 (HTTP/FTP/SFTP/FILE) Retrieve a byte range (i.e a partial docu‐
1221 ment) from a HTTP/1.1, FTP or SFTP server or a local FILE.
1222 Ranges can be specified in a number of ways.
1223
1224 0-499 specifies the first 500 bytes
1225
1226 500-999 specifies the second 500 bytes
1227
1228 -500 specifies the last 500 bytes
1229
1230 9500- specifies the bytes from offset 9500 and forward
1231
1232 0-0,-1 specifies the first and last byte only(*)(H)
1233
1234 500-700,600-799
1235 specifies 300 bytes from offset 500(H)
1236
1237 100-199,500-599
1238 specifies two separate 100-byte ranges(*)(H)
1239
1240 (*) = NOTE that this will cause the server to reply with a multipart
1241 response!
1242
1243 Only digit characters (0-9) are valid in the 'start' and 'stop' fields
1244 of the 'start-stop' range syntax. If a non-digit character is given in
1245 the range, the server's response will be unspecified, depending on the
1246 server's configuration.
1247
1248 You should also be aware that many HTTP/1.1 servers do not have this
1249 feature enabled, so that when you attempt to get a range, you'll
1250 instead get the whole document.
1251
1252 FTP and SFTP range downloads only support the simple 'start-stop' syn‐
1253 tax (optionally with one of the numbers omitted). FTP use depends on
1254 the extended FTP command SIZE.
1255
1256 If this option is used several times, the last one will be used.
1257
1258 --raw When used, it disables all internal HTTP decoding of content or
1259 transfer encodings and instead makes them passed on unaltered,
1260 raw. (Added in 7.16.2)
1261
1262 -R/--remote-time
1263 When used, this will make libcurl attempt to figure out the
1264 timestamp of the remote file, and if that is available make the
1265 local file get that same timestamp.
1266
1267 --retry <num>
1268 If a transient error is returned when curl tries to perform a
1269 transfer, it will retry this number of times before giving up.
1270 Setting the number to 0 makes curl do no retries (which is the
1271 default). Transient error means either: a timeout, an FTP 5xx
1272 response code or an HTTP 5xx response code.
1273
1274 When curl is about to retry a transfer, it will first wait one
1275 second and then for all forthcoming retries it will double the
1276 waiting time until it reaches 10 minutes which then will be the
1277 delay between the rest of the retries. By using --retry-delay
1278 you disable this exponential backoff algorithm. See also
1279 --retry-max-time to limit the total time allowed for retries.
1280 (Added in 7.12.3)
1281
1282 If this option is used multiple times, the last occurrence
1283 decide the amount.
1284
1285 --retry-delay <seconds>
1286 Make curl sleep this amount of time before each retry when a
1287 transfer has failed with a transient error (it changes the
1288 default backoff time algorithm between retries). This option is
1289 only interesting if --retry is also used. Setting this delay to
1290 zero will make curl use the default backoff time. (Added in
1291 7.12.3)
1292
1293 If this option is used multiple times, the last occurrence
1294 determines the amount.
1295
1296 --retry-max-time <seconds>
1297 The retry timer is reset before the first transfer attempt.
1298 Retries will be done as usual (see --retry) as long as the timer
1299 hasn't reached this given limit. Notice that if the timer hasn't
1300 reached the limit, the request will be made and while perform‐
1301 ing, it may take longer than this given time period. To limit a
1302 single request´s maximum time, use -m/--max-time. Set this
1303 option to zero to not timeout retries. (Added in 7.12.3)
1304
1305 If this option is used multiple times, the last occurrence
1306 determines the amount.
1307
1308 -s/--silent
1309 Silent or quiet mode. Don't show progress meter or error mes‐
1310 sages. Makes Curl mute.
1311
1312 -S/--show-error
1313 When used with -s it makes curl show an error message if it
1314 fails.
1315
1316 --socks4 <host[:port]>
1317 Use the specified SOCKS4 proxy. If the port number is not speci‐
1318 fied, it is assumed at port 1080. (Added in 7.15.2)
1319
1320 This option overrides any previous use of -x/--proxy, as they
1321 are mutually exclusive.
1322
1323 If this option is used several times, the last one will be used.
1324
1325 --socks4a <host[:port]>
1326 Use the specified SOCKS4a proxy. If the port number is not spec‐
1327 ified, it is assumed at port 1080. (Added in 7.18.0)
1328
1329 This option overrides any previous use of -x/--proxy, as they
1330 are mutually exclusive.
1331
1332 If this option is used several times, the last one will be used.
1333
1334 --socks5-hostname <host[:port]>
1335 Use the specified SOCKS5 proxy (and let the proxy resolve the
1336 host name). If the port number is not specified, it is assumed
1337 at port 1080. (Added in 7.18.0)
1338
1339 This option overrides any previous use of -x/--proxy, as they
1340 are mutually exclusive.
1341
1342 If this option is used several times, the last one will be used.
1343 (This option was previously wrongly documented and used as
1344 --socks without the number appended.)
1345
1346 --socks5 <host[:port]>
1347 Use the specified SOCKS5 proxy - but resolve the host name
1348 locally. If the port number is not specified, it is assumed at
1349 port 1080.
1350
1351 This option overrides any previous use of -x/--proxy, as they
1352 are mutually exclusive.
1353
1354 If this option is used several times, the last one will be used.
1355 (This option was previously wrongly documented and used as
1356 --socks without the number appended.)
1357
1358 This option (as well as --socks4) does not work with IPV6, FTPS
1359 or LDAP.
1360
1361 --socks5-gssapi-service <servicename>
1362 The default service name for a socks server is rcmd/server-fqdn.
1363 This option allows you to change it.
1364
1365 Examples:
1366 --socks5 proxy-name --socks5-gssapi-service sockd would use
1367 sockd/proxy-name
1368 --socks5 proxy-name --socks5-gssapi-service sockd/real-name
1369 would use sockd/real-name for cases where the proxy-name does
1370 not match the princpal name.
1371 (Added in 7.19.4).
1372
1373 --socks5-gssapi-nec
1374 As part of the gssapi negotiation a protection mode is negoti‐
1375 ated. The rfc1961 says in section 4.3/4.4 it should be pro‐
1376 tected, but the NEC reference implementation does not. The
1377 option --socks5-gssapi-nec allows the unprotected exchange of
1378 the protection mode negotiation. (Added in 7.19.4).
1379
1380 --stderr <file>
1381 Redirect all writes to stderr to the specified file instead. If
1382 the file name is a plain '-', it is instead written to stdout.
1383 This option has no point when you're using a shell with decent
1384 redirecting capabilities.
1385
1386 If this option is used several times, the last one will be used.
1387
1388 --tcp-nodelay
1389 Turn on the TCP_NODELAY option. See the curl_easy_setopt(3) man
1390 page for details about this option. (Added in 7.11.2)
1391
1392 -t/--telnet-option <OPT=val>
1393 Pass options to the telnet protocol. Supported options are:
1394
1395 TTYPE=<term> Sets the terminal type.
1396
1397 XDISPLOC=<X display> Sets the X display location.
1398
1399 NEW_ENV=<var,val> Sets an environment variable.
1400
1401 -T/--upload-file <file>
1402 This transfers the specified local file to the remote URL. If
1403 there is no file part in the specified URL, Curl will append the
1404 local file name. NOTE that you must use a trailing / on the last
1405 directory to really prove to Curl that there is no file name or
1406 curl will think that your last directory name is the remote file
1407 name to use. That will most likely cause the upload operation to
1408 fail. If this is used on a HTTP(S) server, the PUT command will
1409 be used.
1410
1411 Use the file name "-" (a single dash) to use stdin instead of a
1412 given file. Alternately, the file name "." (a single period)
1413 may be specified instead of "-" to use stdin in non-blocking
1414 mode to allow reading server output while stdin is being
1415 uploaded.
1416
1417 You can specify one -T for each URL on the command line. Each -T
1418 + URL pair specifies what to upload and to where. curl also sup‐
1419 ports "globbing" of the -T argument, meaning that you can upload
1420 multiple files to a single URL by using the same URL globbing
1421 style supported in the URL, like this:
1422
1423 curl -T "{file1,file2}" http://www.uploadtothissite.com
1424
1425 or even
1426
1427 curl -T "img[1-1000].png" ftp://ftp.picturemania.com/upload/
1428
1429 --trace <file>
1430 Enables a full trace dump of all incoming and outgoing data,
1431 including descriptive information, to the given output file. Use
1432 "-" as filename to have the output sent to stdout.
1433
1434 This option overrides previous uses of -v/--verbose or --trace-
1435 ascii.
1436
1437 If this option is used several times, the last one will be used.
1438
1439 --trace-ascii <file>
1440 Enables a full trace dump of all incoming and outgoing data,
1441 including descriptive information, to the given output file. Use
1442 "-" as filename to have the output sent to stdout.
1443
1444 This is very similar to --trace, but leaves out the hex part and
1445 only shows the ASCII part of the dump. It makes smaller output
1446 that might be easier to read for untrained humans.
1447
1448 This option overrides previous uses of -v/--verbose or --trace.
1449
1450 If this option is used several times, the last one will be used.
1451
1452 --trace-time
1453 Prepends a time stamp to each trace or verbose line that curl
1454 displays. (Added in 7.14.0)
1455
1456 -u/--user <user:password>
1457 Specify the user name and password to use for server authentica‐
1458 tion. Overrides -n/--netrc and --netrc-optional.
1459
1460 If you just give the user name (without entering a colon) curl
1461 will prompt for a password.
1462
1463 If you use an SSPI-enabled curl binary and do NTLM authentica‐
1464 tion, you can force curl to pick up the user name and password
1465 from your environment by simply specifying a single colon with
1466 this option: "-u :".
1467
1468 If this option is used several times, the last one will be used.
1469
1470 -U/--proxy-user <user:password>
1471 Specify the user name and password to use for proxy authentica‐
1472 tion.
1473
1474 If you use an SSPI-enabled curl binary and do NTLM authentica‐
1475 tion, you can force curl to pick up the user name and password
1476 from your environment by simply specifying a single colon with
1477 this option: "-U :".
1478
1479 If this option is used several times, the last one will be used.
1480
1481 --url <URL>
1482 Specify a URL to fetch. This option is mostly handy when you
1483 want to specify URL(s) in a config file.
1484
1485 This option may be used any number of times. To control where
1486 this URL is written, use the -o/--output or the -O/--remote-name
1487 options.
1488
1489 -v/--verbose
1490 Makes the fetching more verbose/talkative. Mostly useful for
1491 debugging. A line starting with '>' means "header data" sent by
1492 curl, '<' means "header data" received by curl that is hidden in
1493 normal cases, and a line starting with '*' means additional info
1494 provided by curl.
1495
1496 Note that if you only want HTTP headers in the output,
1497 -i/--include might be the option you're looking for.
1498
1499 If you think this option still doesn't give you enough details,
1500 consider using --trace or --trace-ascii instead.
1501
1502 This option overrides previous uses of --trace-ascii or --trace.
1503
1504 Use -s/--silent to make curl quiet.
1505
1506 -V/--version
1507 Displays information about curl and the libcurl version it uses.
1508
1509 The first line includes the full version of curl, libcurl and
1510 other 3rd party libraries linked with the executable.
1511
1512 The second line (starts with "Protocols:") shows all protocols
1513 that libcurl reports to support.
1514
1515 The third line (starts with "Features:") shows specific features
1516 libcurl reports to offer. Available features include:
1517
1518 IPv6 You can use IPv6 with this.
1519
1520 krb4 Krb4 for FTP is supported.
1521
1522 SSL HTTPS and FTPS are supported.
1523
1524 libz Automatic decompression of compressed files over HTTP is
1525 supported.
1526
1527 NTLM NTLM authentication is supported.
1528
1529 GSS-Negotiate
1530 Negotiate authentication and krb5 for FTP is supported.
1531
1532 Debug This curl uses a libcurl built with Debug. This enables
1533 more error-tracking and memory debugging etc. For curl-
1534 developers only!
1535
1536 AsynchDNS
1537 This curl uses asynchronous name resolves.
1538
1539 SPNEGO SPNEGO Negotiate authentication is supported.
1540
1541 Largefile
1542 This curl supports transfers of large files, files larger
1543 than 2GB.
1544
1545 IDN This curl supports IDN - international domain names.
1546
1547 SSPI SSPI is supported. If you use NTLM and set a blank user
1548 name, curl will authenticate with your current user and
1549 password.
1550
1551 -w/--write-out <format>
1552 Defines what to display on stdout after a completed and success‐
1553 ful operation. The format is a string that may contain plain
1554 text mixed with any number of variables. The string can be spec‐
1555 ified as "string", to get read from a particular file you spec‐
1556 ify it "@filename" and to tell curl to read the format from
1557 stdin you write "@-".
1558
1559 The variables present in the output format will be substituted
1560 by the value or text that curl thinks fit, as described below.
1561 All variables are specified as %{variable_name} and to output a
1562 normal % you just write them as %%. You can output a newline by
1563 using \n, a carriage return with \r and a tab space with \t.
1564
1565 NOTE: The %-symbol is a special symbol in the win32-environment,
1566 where all occurrences of % must be doubled when using this
1567 option.
1568
1569 The variables available at this point are:
1570
1571 url_effective The URL that was fetched last. This is most mean‐
1572 ingful if you've told curl to follow location:
1573 headers.
1574
1575 http_code The numerical response code that was found in the
1576 last retrieved HTTP(S) or FTP(s) transfer. In
1577 7.18.2 the alias response_code was added to show
1578 the same info.
1579
1580 http_connect The numerical code that was found in the last
1581 response (from a proxy) to a curl CONNECT
1582 request. (Added in 7.12.4)
1583
1584 time_total The total time, in seconds, that the full opera‐
1585 tion lasted. The time will be displayed with mil‐
1586 lisecond resolution.
1587
1588 time_namelookup
1589 The time, in seconds, it took from the start
1590 until the name resolving was completed.
1591
1592 time_connect The time, in seconds, it took from the start
1593 until the TCP connect to the remote host (or
1594 proxy) was completed.
1595
1596 time_appconnect
1597 The time, in seconds, it took from the start
1598 until the SSL/SSH/etc connect/handshake to the
1599 remote host was completed. (Added in 7.19.0)
1600
1601 time_pretransfer
1602 The time, in seconds, it took from the start
1603 until the file transfer was just about to begin.
1604 This includes all pre-transfer commands and nego‐
1605 tiations that are specific to the particular pro‐
1606 tocol(s) involved.
1607
1608 time_redirect The time, in seconds, it took for all redirection
1609 steps include name lookup, connect, pretransfer
1610 and transfer before the final transaction was
1611 started. time_redirect shows the complete execu‐
1612 tion time for multiple redirections. (Added in
1613 7.12.3)
1614
1615 time_starttransfer
1616 The time, in seconds, it took from the start
1617 until the first byte was just about to be trans‐
1618 ferred. This includes time_pretransfer and also
1619 the time the server needed to calculate the
1620 result.
1621
1622 size_download The total amount of bytes that were downloaded.
1623
1624 size_upload The total amount of bytes that were uploaded.
1625
1626 size_header The total amount of bytes of the downloaded head‐
1627 ers.
1628
1629 size_request The total amount of bytes that were sent in the
1630 HTTP request.
1631
1632 speed_download The average download speed that curl measured for
1633 the complete download.
1634
1635 speed_upload The average upload speed that curl measured for
1636 the complete upload.
1637
1638 content_type The Content-Type of the requested document, if
1639 there was any.
1640
1641 num_connects Number of new connects made in the recent trans‐
1642 fer. (Added in 7.12.3)
1643
1644 num_redirects Number of redirects that were followed in the
1645 request. (Added in 7.12.3)
1646
1647 redirect_url When a HTTP request was made without -L to follow
1648 redirects, this variable will show the actual URL
1649 a redirect would take you to. (Added in 7.18.2)
1650
1651 ftp_entry_path The initial path libcurl ended up in when logging
1652 on to the remote FTP server. (Added in 7.15.4)
1653
1654 ssl_verify_result
1655 The result of the SSL peer certificate verifica‐
1656 tion that was requested. 0 means the verification
1657 was successful. (Added in 7.19.0)
1658
1659 If this option is used several times, the last one will be used.
1660
1661 -x/--proxy <proxyhost[:port]>
1662 Use the specified HTTP proxy. If the port number is not speci‐
1663 fied, it is assumed at port 1080.
1664
1665 This option overrides existing environment variables that set
1666 the proxy to use. If there's an environment variable setting a
1667 proxy, you can set proxy to "" to override it.
1668
1669 Note that all operations that are performed over a HTTP proxy
1670 will transparently be converted to HTTP. It means that certain
1671 protocol specific operations might not be available. This is not
1672 the case if you can tunnel through the proxy, as done with the
1673 -p/--proxytunnel option.
1674
1675 Starting with 7.14.1, the proxy host can be specified the exact
1676 same way as the proxy environment variables, including the pro‐
1677 tocol prefix (http://) and the embedded user + password.
1678
1679 If this option is used several times, the last one will be used.
1680
1681 -X/--request <command>
1682 (HTTP) Specifies a custom request method to use when communicat‐
1683 ing with the HTTP server. The specified request will be used
1684 instead of the method otherwise used (which defaults to GET).
1685 Read the HTTP 1.1 specification for details and explanations.
1686 Common additional HTTP requests include PUT and DELETE, but
1687 related technologies like WebDAV offers PROPFIND, COPY, MOVE and
1688 more.
1689
1690 (FTP) Specifies a custom FTP command to use instead of LIST when
1691 doing file lists with FTP.
1692
1693 If this option is used several times, the last one will be used.
1694
1695 -y/--speed-time <time>
1696 If a download is slower than speed-limit bytes per second during
1697 a speed-time period, the download gets aborted. If speed-time is
1698 used, the default speed-limit will be 1 unless set with -Y.
1699
1700 This option controls transfers and thus will not affect slow
1701 connects etc. If this is a concern for you, try the --connect-
1702 timeout option.
1703
1704 If this option is used several times, the last one will be used.
1705
1706 -Y/--speed-limit <speed>
1707 If a download is slower than this given speed (in bytes per sec‐
1708 ond) for speed-time seconds it gets aborted. speed-time is set
1709 with -y and is 30 if not set.
1710
1711 If this option is used several times, the last one will be used.
1712
1713 -z/--time-cond <date expression>
1714 (HTTP/FTP) Request a file that has been modified later than the
1715 given time and date, or one that has been modified before that
1716 time. The date expression can be all sorts of date strings or if
1717 it doesn't match any internal ones, it tries to get the time
1718 from a given file name instead! See the curl_getdate(3) man
1719 pages for date expression details.
1720
1721 Start the date expression with a dash (-) to make it request for
1722 a document that is older than the given date/time, default is a
1723 document that is newer than the specified date/time.
1724
1725 If this option is used several times, the last one will be used.
1726
1727 --max-redirs <num>
1728 Set maximum number of redirection-followings allowed. If
1729 -L/--location is used, this option can be used to prevent curl
1730 from following redirections "in absurdum". By default, the limit
1731 is set to 50 redirections. Set this option to -1 to make it lim‐
1732 itless.
1733
1734 If this option is used several times, the last one will be used.
1735
1736 -0/--http1.0
1737 (HTTP) Forces curl to issue its requests using HTTP 1.0 instead
1738 of using its internally preferred: HTTP 1.1.
1739
1740 -1/--tlsv1
1741 (SSL) Forces curl to use TLS version 1.x when negotiating with a
1742 remote TLS server. You can use options --tlsv1.0, --tlsv1.1,
1743 and --tlsv1.2 to control the TLS version more precisely (if the
1744 SSL backend in use supports such a level of control).
1745
1746 --tlsv1.0
1747 (SSL) Forces curl to use TLS version 1.0 when negotiating with a
1748 remote TLS server. (Added in 7.34.0)
1749
1750 --tlsv1.1
1751 (SSL) Forces curl to use TLS version 1.1 when negotiating with a
1752 remote TLS server. (Added in 7.34.0)
1753
1754 --tlsv1.2
1755 (SSL) Forces curl to use TLS version 1.2 when negotiating with a
1756 remote TLS server. (Added in 7.34.0)
1757
1758 -2/--sslv2
1759 (SSL) Forces curl to use SSL version 2 when negotiating with a
1760 remote SSL server.
1761
1762 -3/--sslv3
1763 (SSL) Forces curl to use SSL version 3 when negotiating with a
1764 remote SSL server.
1765
1766 -4/--ipv4
1767 If libcurl is capable of resolving an address to multiple IP
1768 versions (which it is if it is IPv6-capable), this option tells
1769 libcurl to resolve names to IPv4 addresses only.
1770
1771 -6/--ipv6
1772 If libcurl is capable of resolving an address to multiple IP
1773 versions (which it is if it is IPv6-capable), this option tells
1774 libcurl to resolve names to IPv6 addresses only.
1775
1776 -#/--progress-bar
1777 Make curl display progress information as a progress bar instead
1778 of the default statistics.
1779
1781 ~/.curlrc
1782 Default config file, see -K/--config for details.
1783
1785 The environment variables can be specified in lower case or upper case.
1786 The lower case version has precedence. http_proxy is an exception as it
1787 is only available in lower case.
1788
1789 http_proxy [protocol://]<host>[:port]
1790 Sets the proxy server to use for HTTP.
1791
1792 HTTPS_PROXY [protocol://]<host>[:port]
1793 Sets the proxy server to use for HTTPS.
1794
1795 FTP_PROXY [protocol://]<host>[:port]
1796 Sets the proxy server to use for FTP.
1797
1798 ALL_PROXY [protocol://]<host>[:port]
1799 Sets the proxy server to use if no protocol-specific proxy is
1800 set.
1801
1802 NO_PROXY <comma-separated list of hosts>
1803 list of host names that shouldn't go through any proxy. If set
1804 to a asterisk '*' only, it matches all hosts.
1805
1807 There are a bunch of different error codes and their corresponding
1808 error messages that may appear during bad conditions. At the time of
1809 this writing, the exit codes are:
1810
1811 1 Unsupported protocol. This build of curl has no support for this
1812 protocol.
1813
1814 2 Failed to initialize.
1815
1816 3 URL malformed. The syntax was not correct.
1817
1818 5 Couldn't resolve proxy. The given proxy host could not be
1819 resolved.
1820
1821 6 Couldn't resolve host. The given remote host was not resolved.
1822
1823 7 Failed to connect to host.
1824
1825 8 FTP weird server reply. The server sent data curl couldn't
1826 parse.
1827
1828 9 FTP access denied. The server denied login or denied access to
1829 the particular resource or directory you wanted to reach. Most
1830 often you tried to change to a directory that doesn't exist on
1831 the server.
1832
1833 11 FTP weird PASS reply. Curl couldn't parse the reply sent to the
1834 PASS request.
1835
1836 13 FTP weird PASV reply, Curl couldn't parse the reply sent to the
1837 PASV request.
1838
1839 14 FTP weird 227 format. Curl couldn't parse the 227-line the
1840 server sent.
1841
1842 15 FTP can't get host. Couldn't resolve the host IP we got in the
1843 227-line.
1844
1845 17 FTP couldn't set binary. Couldn't change transfer method to
1846 binary.
1847
1848 18 Partial file. Only a part of the file was transferred.
1849
1850 19 FTP couldn't download/access the given file, the RETR (or simi‐
1851 lar) command failed.
1852
1853 21 FTP quote error. A quote command returned error from the server.
1854
1855 22 HTTP page not retrieved. The requested url was not found or
1856 returned another error with the HTTP error code being 400 or
1857 above. This return code only appears if -f/--fail is used.
1858
1859 23 Write error. Curl couldn't write data to a local filesystem or
1860 similar.
1861
1862 25 FTP couldn't STOR file. The server denied the STOR operation,
1863 used for FTP uploading.
1864
1865 26 Read error. Various reading problems.
1866
1867 27 Out of memory. A memory allocation request failed.
1868
1869 28 Operation timeout. The specified time-out period was reached
1870 according to the conditions.
1871
1872 30 FTP PORT failed. The PORT command failed. Not all FTP servers
1873 support the PORT command, try doing a transfer using PASV
1874 instead!
1875
1876 31 FTP couldn't use REST. The REST command failed. This command is
1877 used for resumed FTP transfers.
1878
1879 33 HTTP range error. The range "command" didn't work.
1880
1881 34 HTTP post error. Internal post-request generation error.
1882
1883 35 SSL connect error. The SSL handshaking failed.
1884
1885 36 FTP bad download resume. Couldn't continue an earlier aborted
1886 download.
1887
1888 37 FILE couldn't read file. Failed to open the file. Permissions?
1889
1890 38 LDAP cannot bind. LDAP bind operation failed.
1891
1892 39 LDAP search failed.
1893
1894 41 Function not found. A required LDAP function was not found.
1895
1896 42 Aborted by callback. An application told curl to abort the oper‐
1897 ation.
1898
1899 43 Internal error. A function was called with a bad parameter.
1900
1901 45 Interface error. A specified outgoing interface could not be
1902 used.
1903
1904 47 Too many redirects. When following redirects, curl hit the maxi‐
1905 mum amount.
1906
1907 48 Unknown TELNET option specified.
1908
1909 49 Malformed telnet option.
1910
1911 51 The peer's SSL certificate or SSH MD5 fingerprint was not ok.
1912
1913 52 The server didn't reply anything, which here is considered an
1914 error.
1915
1916 53 SSL crypto engine not found.
1917
1918 54 Cannot set SSL crypto engine as default.
1919
1920 55 Failed sending network data.
1921
1922 56 Failure in receiving network data.
1923
1924 58 Problem with the local certificate.
1925
1926 59 Couldn't use specified SSL cipher.
1927
1928 60 Peer certificate cannot be authenticated with known CA certifi‐
1929 cates.
1930
1931 61 Unrecognized transfer encoding.
1932
1933 62 Invalid LDAP URL.
1934
1935 63 Maximum file size exceeded.
1936
1937 64 Requested FTP SSL level failed.
1938
1939 65 Sending the data requires a rewind that failed.
1940
1941 66 Failed to initialize SSL Engine.
1942
1943 67 The user name, password, or similar was not accepted and curl
1944 failed to log in.
1945
1946 68 File not found on TFTP server.
1947
1948 69 Permission problem on TFTP server.
1949
1950 70 Out of disk space on TFTP server.
1951
1952 71 Illegal TFTP operation.
1953
1954 72 Unknown TFTP transfer ID.
1955
1956 73 File already exists (TFTP).
1957
1958 74 No such user (TFTP).
1959
1960 75 Character conversion failed.
1961
1962 76 Character conversion functions required.
1963
1964 77 Problem with reading the SSL CA cert (path? access rights?).
1965
1966 78 The resource referenced in the URL does not exist.
1967
1968 79 An unspecified error occurred during the SSH session.
1969
1970 80 Failed to shut down the SSL connection.
1971
1972 82 Could not load CRL file, missing or wrong format (added in
1973 7.19.0).
1974
1975 83 Issuer check failed (added in 7.19.0).
1976
1977 XX More error codes will appear here in future releases. The exist‐
1978 ing ones are meant to never change.
1979
1981 Daniel Stenberg is the main author, but the whole list of contributors
1982 is found in the separate THANKS file.
1983
1985 http://curl.haxx.se
1986
1988 ftp://ftp.sunet.se/pub/www/utilities/curl/
1989
1991 ftp(1), wget(1)
1992
1993
1994
1995
1996Curl 7.19.0 10 July 2008 curl(1)