Resync
[CMakeLuaTailorHgBridge.git] / CMakeLua / Utilities / cmcurl-7.19.0 / docs / MANUAL
blob3aea5d40f41d115927ccd6fd3e4fa734d8f0fd2b
1 LATEST VERSION
3   You always find news about what's going on as well as the latest versions
4   from the curl web pages, located at:
6         http://curl.haxx.se
8 SIMPLE USAGE
10   Get the main page from Netscape's web-server:
12         curl http://www.netscape.com/
14   Get the README file the user's home directory at funet's ftp-server:
16         curl ftp://ftp.funet.fi/README
18   Get a web page from a server using port 8000:
20         curl http://www.weirdserver.com:8000/
22   Get a list of a directory of an FTP site:
24         curl ftp://cool.haxx.se/
26   Get the definition of curl from a dictionary:
28         curl dict://dict.org/m:curl
30   Fetch two documents at once:
32         curl ftp://cool.haxx.se/ http://www.weirdserver.com:8000/
34   Get a file off an FTPS server:
36         curl ftps://files.are.secure.com/secrets.txt
38   or use the more appropriate FTPS way to get the same file:
40         curl --ftp-ssl ftp://files.are.secure.com/secrets.txt
42   Get a file from an SSH server using SFTP:
44         curl -u username sftp://shell.example.com/etc/issue
46   Get a file from an SSH server using SCP using a private key to authenticate:
48         curl -u username: --key ~/.ssh/id_dsa --pubkey ~/.ssh/id_dsa.pub \
49                 scp://shell.example.com/~/personal.txt
51   Get the main page from an IPv6 web server:
53         curl -g "http://[2001:1890:1112:1::20]/"
55 DOWNLOAD TO A FILE
57   Get a web page and store in a local file:
59         curl -o thatpage.html http://www.netscape.com/
61   Get a web page and store in a local file, make the local file get the name
62   of the remote document (if no file name part is specified in the URL, this
63   will fail):
65         curl -O http://www.netscape.com/index.html
67   Fetch two files and store them with their remote names:
69         curl -O www.haxx.se/index.html -O curl.haxx.se/download.html
71 USING PASSWORDS
73  FTP
75    To ftp files using name+passwd, include them in the URL like:
77         curl ftp://name:passwd@machine.domain:port/full/path/to/file
79    or specify them with the -u flag like
81         curl -u name:passwd ftp://machine.domain:port/full/path/to/file
83  FTPS
85    It is just like for FTP, but you may also want to specify and use
86    SSL-specific options for certificates etc.
88    Note that using FTPS:// as prefix is the "implicit" way as described in the
89    standards while the recommended "explicit" way is done by using FTP:// and
90    the --ftp-ssl option.
92  SFTP / SCP
94    This is similar to FTP, but you can specify a private key to use instead of
95    a password. Note that the private key may itself be protected by a password
96    that is unrelated to the login password of the remote system.  If you
97    provide a private key file you must also provide a public key file.
99  HTTP
101    Curl also supports user and password in HTTP URLs, thus you can pick a file
102    like:
104         curl http://name:passwd@machine.domain/full/path/to/file
106    or specify user and password separately like in
108         curl -u name:passwd http://machine.domain/full/path/to/file
110    HTTP offers many different methods of authentication and curl supports
111    several: Basic, Digest, NTLM and Negotiate. Without telling which method to
112    use, curl defaults to Basic. You can also ask curl to pick the most secure
113    ones out of the ones that the server accepts for the given URL, by using
114    --anyauth.
116    NOTE! Since HTTP URLs don't support user and password, you can't use that
117    style when using Curl via a proxy. You _must_ use the -u style fetch
118    during such circumstances.
120  HTTPS
122    Probably most commonly used with private certificates, as explained below.
124 PROXY
126  Get an ftp file using a proxy named my-proxy that uses port 888:
128         curl -x my-proxy:888 ftp://ftp.leachsite.com/README
130  Get a file from a HTTP server that requires user and password, using the
131  same proxy as above:
133         curl -u user:passwd -x my-proxy:888 http://www.get.this/
135  Some proxies require special authentication. Specify by using -U as above:
137         curl -U user:passwd -x my-proxy:888 http://www.get.this/
139  curl also supports SOCKS4 and SOCKS5 proxies with --socks4 and --socks5.
141  See also the environment variables Curl support that offer further proxy
142  control.
144 RANGES
146   With HTTP 1.1 byte-ranges were introduced. Using this, a client can request
147   to get only one or more subparts of a specified document. Curl supports
148   this with the -r flag.
150   Get the first 100 bytes of a document:
152         curl -r 0-99 http://www.get.this/
154   Get the last 500 bytes of a document:
156         curl -r -500 http://www.get.this/
158   Curl also supports simple ranges for FTP files as well. Then you can only
159   specify start and stop position.
161   Get the first 100 bytes of a document using FTP:
163         curl -r 0-99 ftp://www.get.this/README  
165 UPLOADING
167  FTP / FTPS / SFTP / SCP
169   Upload all data on stdin to a specified server:
171         curl -T - ftp://ftp.upload.com/myfile
173   Upload data from a specified file, login with user and password:
175         curl -T uploadfile -u user:passwd ftp://ftp.upload.com/myfile
177   Upload a local file to the remote site, and use the local file name remote
178   too:
180         curl -T uploadfile -u user:passwd ftp://ftp.upload.com/
182   Upload a local file to get appended to the remote file:
184         curl -T localfile -a ftp://ftp.upload.com/remotefile
186   Curl also supports ftp upload through a proxy, but only if the proxy is
187   configured to allow that kind of tunneling. If it does, you can run curl in
188   a fashion similar to:
190         curl --proxytunnel -x proxy:port -T localfile ftp.upload.com
192  HTTP
194   Upload all data on stdin to a specified http site:
196         curl -T - http://www.upload.com/myfile
198   Note that the http server must have been configured to accept PUT before
199   this can be done successfully.
201   For other ways to do http data upload, see the POST section below.
203 VERBOSE / DEBUG
205   If curl fails where it isn't supposed to, if the servers don't let you in,
206   if you can't understand the responses: use the -v flag to get verbose
207   fetching. Curl will output lots of info and what it sends and receives in
208   order to let the user see all client-server interaction (but it won't show
209   you the actual data).
211         curl -v ftp://ftp.upload.com/
213   To get even more details and information on what curl does, try using the
214   --trace or --trace-ascii options with a given file name to log to, like
215   this:
217         curl --trace trace.txt www.haxx.se
220 DETAILED INFORMATION
222   Different protocols provide different ways of getting detailed information
223   about specific files/documents. To get curl to show detailed information
224   about a single file, you should use -I/--head option. It displays all
225   available info on a single file for HTTP and FTP. The HTTP information is a
226   lot more extensive.
228   For HTTP, you can get the header information (the same as -I would show)
229   shown before the data by using -i/--include. Curl understands the
230   -D/--dump-header option when getting files from both FTP and HTTP, and it
231   will then store the headers in the specified file.
233   Store the HTTP headers in a separate file (headers.txt in the example):
235         curl --dump-header headers.txt curl.haxx.se
237   Note that headers stored in a separate file can be very useful at a later
238   time if you want curl to use cookies sent by the server. More about that in
239   the cookies section.
241 POST (HTTP)
243   It's easy to post data using curl. This is done using the -d <data>
244   option.  The post data must be urlencoded.
246   Post a simple "name" and "phone" guestbook.
248         curl -d "name=Rafael%20Sagula&phone=3320780" \
249                 http://www.where.com/guest.cgi
251   How to post a form with curl, lesson #1:
253   Dig out all the <input> tags in the form that you want to fill in. (There's
254   a perl program called formfind.pl on the curl site that helps with this).
256   If there's a "normal" post, you use -d to post. -d takes a full "post
257   string", which is in the format
259         <variable1>=<data1>&<variable2>=<data2>&...
261   The 'variable' names are the names set with "name=" in the <input> tags, and
262   the data is the contents you want to fill in for the inputs. The data *must*
263   be properly URL encoded. That means you replace space with + and that you
264   write weird letters with %XX where XX is the hexadecimal representation of
265   the letter's ASCII code.
267   Example:
269   (page located at http://www.formpost.com/getthis/
271         <form action="post.cgi" method="post">
272         <input name=user size=10>
273         <input name=pass type=password size=10>
274         <input name=id type=hidden value="blablabla">
275         <input name=ding value="submit">
276         </form>
278   We want to enter user 'foobar' with password '12345'.
280   To post to this, you enter a curl command line like:
282         curl -d "user=foobar&pass=12345&id=blablabla&ding=submit"  (continues)
283           http://www.formpost.com/getthis/post.cgi
286   While -d uses the application/x-www-form-urlencoded mime-type, generally
287   understood by CGI's and similar, curl also supports the more capable
288   multipart/form-data type. This latter type supports things like file upload.
290   -F accepts parameters like -F "name=contents". If you want the contents to
291   be read from a file, use <@filename> as contents. When specifying a file,
292   you can also specify the file content type by appending ';type=<mime type>'
293   to the file name. You can also post the contents of several files in one
294   field.  For example, the field name 'coolfiles' is used to send three files,
295   with different content types using the following syntax:
297         curl -F "coolfiles=@fil1.gif;type=image/gif,fil2.txt,fil3.html" \
298         http://www.post.com/postit.cgi
300   If the content-type is not specified, curl will try to guess from the file
301   extension (it only knows a few), or use the previously specified type (from
302   an earlier file if several files are specified in a list) or else it will
303   using the default type 'text/plain'.
305   Emulate a fill-in form with -F. Let's say you fill in three fields in a
306   form. One field is a file name which to post, one field is your name and one
307   field is a file description. We want to post the file we have written named
308   "cooltext.txt". To let curl do the posting of this data instead of your
309   favourite browser, you have to read the HTML source of the form page and
310   find the names of the input fields. In our example, the input field names
311   are 'file', 'yourname' and 'filedescription'.
313         curl -F "file=@cooltext.txt" -F "yourname=Daniel" \
314              -F "filedescription=Cool text file with cool text inside" \
315              http://www.post.com/postit.cgi
317   To send two files in one post you can do it in two ways:
319   1. Send multiple files in a single "field" with a single field name:
321         curl -F "pictures=@dog.gif,cat.gif" 
323   2. Send two fields with two field names: 
325         curl -F "docpicture=@dog.gif" -F "catpicture=@cat.gif" 
327   To send a field value literally without interpreting a leading '@'
328   or '<', or an embedded ';type=', use --form-string instead of
329   -F. This is recommended when the value is obtained from a user or
330   some other unpredictable source. Under these circumstances, using
331   -F instead of --form-string would allow a user to trick curl into
332   uploading a file.
334 REFERRER
336   A HTTP request has the option to include information about which address
337   that referred to actual page.  Curl allows you to specify the
338   referrer to be used on the command line. It is especially useful to
339   fool or trick stupid servers or CGI scripts that rely on that information
340   being available or contain certain data.
342         curl -e www.coolsite.com http://www.showme.com/
344   NOTE: The Referer: [sic] field is defined in the HTTP spec to be a full URL.
346 USER AGENT
348   A HTTP request has the option to include information about the browser
349   that generated the request. Curl allows it to be specified on the command
350   line. It is especially useful to fool or trick stupid servers or CGI
351   scripts that only accept certain browsers.
353   Example:
355   curl -A 'Mozilla/3.0 (Win95; I)' http://www.nationsbank.com/
357   Other common strings:
358     'Mozilla/3.0 (Win95; I)'     Netscape Version 3 for Windows 95
359     'Mozilla/3.04 (Win95; U)'    Netscape Version 3 for Windows 95
360     'Mozilla/2.02 (OS/2; U)'     Netscape Version 2 for OS/2
361     'Mozilla/4.04 [en] (X11; U; AIX 4.2; Nav)'           NS for AIX
362     'Mozilla/4.05 [en] (X11; U; Linux 2.0.32 i586)'      NS for Linux
364   Note that Internet Explorer tries hard to be compatible in every way:
365     'Mozilla/4.0 (compatible; MSIE 4.01; Windows 95)'    MSIE for W95
367   Mozilla is not the only possible User-Agent name:
368     'Konqueror/1.0'             KDE File Manager desktop client
369     'Lynx/2.7.1 libwww-FM/2.14' Lynx command line browser
371 COOKIES
373   Cookies are generally used by web servers to keep state information at the
374   client's side. The server sets cookies by sending a response line in the
375   headers that looks like 'Set-Cookie: <data>' where the data part then
376   typically contains a set of NAME=VALUE pairs (separated by semicolons ';'
377   like "NAME1=VALUE1; NAME2=VALUE2;"). The server can also specify for what
378   path the "cookie" should be used for (by specifying "path=value"), when the
379   cookie should expire ("expire=DATE"), for what domain to use it
380   ("domain=NAME") and if it should be used on secure connections only
381   ("secure").
383   If you've received a page from a server that contains a header like:
384         Set-Cookie: sessionid=boo123; path="/foo";
386   it means the server wants that first pair passed on when we get anything in
387   a path beginning with "/foo".
389   Example, get a page that wants my name passed in a cookie:
391         curl -b "name=Daniel" www.sillypage.com
393   Curl also has the ability to use previously received cookies in following
394   sessions. If you get cookies from a server and store them in a file in a
395   manner similar to:
397         curl --dump-header headers www.example.com
399   ... you can then in a second connect to that (or another) site, use the
400   cookies from the 'headers' file like:
402         curl -b headers www.example.com
404   While saving headers to a file is a working way to store cookies, it is
405   however error-prone and not the preferred way to do this. Instead, make curl
406   save the incoming cookies using the well-known netscape cookie format like
407   this:
409         curl -c cookies.txt www.example.com
411   Note that by specifying -b you enable the "cookie awareness" and with -L
412   you can make curl follow a location: (which often is used in combination
413   with cookies). So that if a site sends cookies and a location, you can
414   use a non-existing file to trigger the cookie awareness like:
416         curl -L -b empty.txt www.example.com
418   The file to read cookies from must be formatted using plain HTTP headers OR
419   as netscape's cookie file. Curl will determine what kind it is based on the
420   file contents.  In the above command, curl will parse the header and store
421   the cookies received from www.example.com.  curl will send to the server the
422   stored cookies which match the request as it follows the location.  The
423   file "empty.txt" may be a nonexistent file.
425   Alas, to both read and write cookies from a netscape cookie file, you can
426   set both -b and -c to use the same file:
428         curl -b cookies.txt -c cookies.txt www.example.com
430 PROGRESS METER
432   The progress meter exists to show a user that something actually is
433   happening. The different fields in the output have the following meaning:
435   % Total    % Received % Xferd  Average Speed          Time             Curr.
436                                  Dload  Upload Total    Current  Left    Speed
437   0  151M    0 38608    0     0   9406      0  4:41:43  0:00:04  4:41:39  9287
439   From left-to-right:
440    %             - percentage completed of the whole transfer
441    Total         - total size of the whole expected transfer
442    %             - percentage completed of the download
443    Received      - currently downloaded amount of bytes
444    %             - percentage completed of the upload
445    Xferd         - currently uploaded amount of bytes
446    Average Speed
447    Dload         - the average transfer speed of the download
448    Average Speed
449    Upload        - the average transfer speed of the upload
450    Time Total    - expected time to complete the operation
451    Time Current  - time passed since the invoke
452    Time Left     - expected time left to completion
453    Curr.Speed    - the average transfer speed the last 5 seconds (the first
454                    5 seconds of a transfer is based on less time of course.)
456   The -# option will display a totally different progress bar that doesn't
457   need much explanation!
459 SPEED LIMIT
461   Curl allows the user to set the transfer speed conditions that must be met
462   to let the transfer keep going. By using the switch -y and -Y you
463   can make curl abort transfers if the transfer speed is below the specified
464   lowest limit for a specified time.
466   To have curl abort the download if the speed is slower than 3000 bytes per
467   second for 1 minute, run:
469         curl -Y 3000 -y 60 www.far-away-site.com
471   This can very well be used in combination with the overall time limit, so
472   that the above operation must be completed in whole within 30 minutes:
474         curl -m 1800 -Y 3000 -y 60 www.far-away-site.com
476   Forcing curl not to transfer data faster than a given rate is also possible,
477   which might be useful if you're using a limited bandwidth connection and you
478   don't want your transfer to use all of it (sometimes referred to as
479   "bandwidth throttle").
481   Make curl transfer data no faster than 10 kilobytes per second:
483         curl --limit-rate 10K www.far-away-site.com
485     or
487         curl --limit-rate 10240 www.far-away-site.com
489   Or prevent curl from uploading data faster than 1 megabyte per second:
491         curl -T upload --limit-rate 1M ftp://uploadshereplease.com
493   When using the --limit-rate option, the transfer rate is regulated on a
494   per-second basis, which will cause the total transfer speed to become lower
495   than the given number. Sometimes of course substantially lower, if your
496   transfer stalls during periods.
498 CONFIG FILE
500   Curl automatically tries to read the .curlrc file (or _curlrc file on win32
501   systems) from the user's home dir on startup.
503   The config file could be made up with normal command line switches, but you
504   can also specify the long options without the dashes to make it more
505   readable. You can separate the options and the parameter with spaces, or
506   with = or :. Comments can be used within the file. If the first letter on a
507   line is a '#'-letter the rest of the line is treated as a comment.
509   If you want the parameter to contain spaces, you must enclose the entire
510   parameter within double quotes ("). Within those quotes, you specify a
511   quote as \".
513   NOTE: You must specify options and their arguments on the same line.
515   Example, set default time out and proxy in a config file:
517         # We want a 30 minute timeout:
518         -m 1800
519         # ... and we use a proxy for all accesses:
520         proxy = proxy.our.domain.com:8080
522   White spaces ARE significant at the end of lines, but all white spaces
523   leading up to the first characters of each line are ignored.
525   Prevent curl from reading the default file by using -q as the first command
526   line parameter, like:
528         curl -q www.thatsite.com
530   Force curl to get and display a local help page in case it is invoked
531   without URL by making a config file similar to:
533         # default url to get
534         url = "http://help.with.curl.com/curlhelp.html"
536   You can specify another config file to be read by using the -K/--config
537   flag. If you set config file name to "-" it'll read the config from stdin,
538   which can be handy if you want to hide options from being visible in process
539   tables etc:
541         echo "user = user:passwd" | curl -K - http://that.secret.site.com
543 EXTRA HEADERS
545   When using curl in your own very special programs, you may end up needing
546   to pass on your own custom headers when getting a web page. You can do
547   this by using the -H flag.
549   Example, send the header "X-you-and-me: yes" to the server when getting a
550   page:
552         curl -H "X-you-and-me: yes" www.love.com
554   This can also be useful in case you want curl to send a different text in a
555   header than it normally does. The -H header you specify then replaces the
556   header curl would normally send. If you replace an internal header with an
557   empty one, you prevent that header from being sent. To prevent the Host:
558   header from being used:
560         curl -H "Host:" www.server.com
562 FTP and PATH NAMES
564   Do note that when getting files with the ftp:// URL, the given path is
565   relative the directory you enter. To get the file 'README' from your home
566   directory at your ftp site, do:
568         curl ftp://user:passwd@my.site.com/README
570   But if you want the README file from the root directory of that very same
571   site, you need to specify the absolute file name:
573         curl ftp://user:passwd@my.site.com//README
575   (I.e with an extra slash in front of the file name.)
577 SFTP and SCP and PATH NAMES
579   With sftp: and scp: URLs, the path name given is the absolute name on the
580   server. To access a file relative to the remote user's home directory,
581   prefix the file with /~/ , such as:
583         curl -u $USER sftp://home.example.com/~/.bashrc
585 FTP and firewalls
587   The FTP protocol requires one of the involved parties to open a second
588   connection as soon as data is about to get transfered. There are two ways to
589   do this.
591   The default way for curl is to issue the PASV command which causes the
592   server to open another port and await another connection performed by the
593   client. This is good if the client is behind a firewall that don't allow
594   incoming connections.
596         curl ftp.download.com
598   If the server for example, is behind a firewall that don't allow connections
599   on other ports than 21 (or if it just doesn't support the PASV command), the
600   other way to do it is to use the PORT command and instruct the server to
601   connect to the client on the given (as parameters to the PORT command) IP
602   number and port.
604   The -P flag to curl supports a few different options. Your machine may have
605   several IP-addresses and/or network interfaces and curl allows you to select
606   which of them to use. Default address can also be used:
608         curl -P - ftp.download.com
610   Download with PORT but use the IP address of our 'le0' interface (this does
611   not work on windows):
613         curl -P le0 ftp.download.com
615   Download with PORT but use 192.168.0.10 as our IP address to use:
617         curl -P 192.168.0.10 ftp.download.com
619 NETWORK INTERFACE
621   Get a web page from a server using a specified port for the interface:
623         curl --interface eth0:1 http://www.netscape.com/
625   or
627         curl --interface 192.168.1.10 http://www.netscape.com/
629 HTTPS
631   Secure HTTP requires SSL libraries to be installed and used when curl is
632   built. If that is done, curl is capable of retrieving and posting documents
633   using the HTTPS protocol.
635   Example:
637         curl https://www.secure-site.com
639   Curl is also capable of using your personal certificates to get/post files
640   from sites that require valid certificates. The only drawback is that the
641   certificate needs to be in PEM-format. PEM is a standard and open format to
642   store certificates with, but it is not used by the most commonly used
643   browsers (Netscape and MSIE both use the so called PKCS#12 format). If you
644   want curl to use the certificates you use with your (favourite) browser, you
645   may need to download/compile a converter that can convert your browser's
646   formatted certificates to PEM formatted ones. This kind of converter is
647   included in recent versions of OpenSSL, and for older versions Dr Stephen
648   N. Henson has written a patch for SSLeay that adds this functionality. You
649   can get his patch (that requires an SSLeay installation) from his site at:
650   http://www.drh-consultancy.demon.co.uk/
652   Example on how to automatically retrieve a document using a certificate with
653   a personal password:
655         curl -E /path/to/cert.pem:password https://secure.site.com/
657   If you neglect to specify the password on the command line, you will be
658   prompted for the correct password before any data can be received.
660   Many older SSL-servers have problems with SSLv3 or TLS, that newer versions
661   of OpenSSL etc is using, therefore it is sometimes useful to specify what
662   SSL-version curl should use. Use -3, -2 or -1 to specify that exact SSL
663   version to use (for SSLv3, SSLv2 or TLSv1 respectively):
665         curl -2 https://secure.site.com/
667   Otherwise, curl will first attempt to use v3 and then v2.
669   To use OpenSSL to convert your favourite browser's certificate into a PEM
670   formatted one that curl can use, do something like this (assuming netscape,
671   but IE is likely to work similarly):
673     You start with hitting the 'security' menu button in netscape. 
675     Select 'certificates->yours' and then pick a certificate in the list 
677     Press the 'export' button 
679     enter your PIN code for the certs 
681     select a proper place to save it 
683     Run the 'openssl' application to convert the certificate. If you cd to the
684     openssl installation, you can do it like:
686      # ./apps/openssl pkcs12 -in [file you saved] -clcerts -out [PEMfile]
689 RESUMING FILE TRANSFERS
691  To continue a file transfer where it was previously aborted, curl supports
692  resume on http(s) downloads as well as ftp uploads and downloads.
694  Continue downloading a document:
696         curl -C - -o file ftp://ftp.server.com/path/file
698  Continue uploading a document(*1):
700         curl -C - -T file ftp://ftp.server.com/path/file
702  Continue downloading a document from a web server(*2):
704         curl -C - -o file http://www.server.com/
706  (*1) = This requires that the ftp server supports the non-standard command
707         SIZE. If it doesn't, curl will say so.
709  (*2) = This requires that the web server supports at least HTTP/1.1. If it
710         doesn't, curl will say so.
712 TIME CONDITIONS
714  HTTP allows a client to specify a time condition for the document it
715  requests. It is If-Modified-Since or If-Unmodified-Since. Curl allow you to
716  specify them with the -z/--time-cond flag.
718  For example, you can easily make a download that only gets performed if the
719  remote file is newer than a local copy. It would be made like:
721         curl -z local.html http://remote.server.com/remote.html
723  Or you can download a file only if the local file is newer than the remote
724  one. Do this by prepending the date string with a '-', as in:
726         curl -z -local.html http://remote.server.com/remote.html
728  You can specify a "free text" date as condition. Tell curl to only download
729  the file if it was updated since January 12, 2012:
731         curl -z "Jan 12 2012" http://remote.server.com/remote.html
733  Curl will then accept a wide range of date formats. You always make the date
734  check the other way around by prepending it with a dash '-'.
736 DICT
738   For fun try
740         curl dict://dict.org/m:curl
741         curl dict://dict.org/d:heisenbug:jargon
742         curl dict://dict.org/d:daniel:web1913
744   Aliases for 'm' are 'match' and 'find', and aliases for 'd' are 'define'
745   and 'lookup'. For example,
747         curl dict://dict.org/find:curl
749   Commands that break the URL description of the RFC (but not the DICT
750   protocol) are
752         curl dict://dict.org/show:db
753         curl dict://dict.org/show:strat
755   Authentication is still missing (but this is not required by the RFC)
757 LDAP
759   If you have installed the OpenLDAP library, curl can take advantage of it
760   and offer ldap:// support.
762   LDAP is a complex thing and writing an LDAP query is not an easy task. I do
763   advice you to dig up the syntax description for that elsewhere. Two places
764   that might suit you are:
766   Netscape's "Netscape Directory SDK 3.0 for C Programmer's Guide Chapter 10:
767   Working with LDAP URLs":
768   http://developer.netscape.com/docs/manuals/dirsdk/csdk30/url.htm
770   RFC 2255, "The LDAP URL Format" http://curl.haxx.se/rfc/rfc2255.txt
772   To show you an example, this is now I can get all people from my local LDAP
773   server that has a certain sub-domain in their email address:
775         curl -B "ldap://ldap.frontec.se/o=frontec??sub?mail=*sth.frontec.se"
777   If I want the same info in HTML format, I can get it by not using the -B
778   (enforce ASCII) flag.
780 ENVIRONMENT VARIABLES
782   Curl reads and understands the following environment variables:
784         http_proxy, HTTPS_PROXY, FTP_PROXY
786   They should be set for protocol-specific proxies. General proxy should be
787   set with
788         
789         ALL_PROXY
791   A comma-separated list of host names that shouldn't go through any proxy is
792   set in (only an asterisk, '*' matches all hosts)
794         NO_PROXY
796   If a tail substring of the domain-path for a host matches one of these
797   strings, transactions with that node will not be proxied.
800   The usage of the -x/--proxy flag overrides the environment variables.
802 NETRC
804   Unix introduced the .netrc concept a long time ago. It is a way for a user
805   to specify name and password for commonly visited ftp sites in a file so
806   that you don't have to type them in each time you visit those sites. You
807   realize this is a big security risk if someone else gets hold of your
808   passwords, so therefore most unix programs won't read this file unless it is
809   only readable by yourself (curl doesn't care though).
811   Curl supports .netrc files if told so (using the -n/--netrc and
812   --netrc-optional options). This is not restricted to only ftp,
813   but curl can use it for all protocols where authentication is used.
815   A very simple .netrc file could look something like:
817         machine curl.haxx.se login iamdaniel password mysecret
819 CUSTOM OUTPUT
821   To better allow script programmers to get to know about the progress of
822   curl, the -w/--write-out option was introduced. Using this, you can specify
823   what information from the previous transfer you want to extract.
825   To display the amount of bytes downloaded together with some text and an
826   ending newline:
828         curl -w 'We downloaded %{size_download} bytes\n' www.download.com
830 KERBEROS FTP TRANSFER
832   Curl supports kerberos4 and kerberos5/GSSAPI for FTP transfers. You need
833   the kerberos package installed and used at curl build time for it to be
834   used.
836   First, get the krb-ticket the normal way, like with the kinit/kauth tool.
837   Then use curl in way similar to:
839         curl --krb private ftp://krb4site.com -u username:fakepwd
841   There's no use for a password on the -u switch, but a blank one will make
842   curl ask for one and you already entered the real password to kinit/kauth.
844 TELNET
846   The curl telnet support is basic and very easy to use. Curl passes all data
847   passed to it on stdin to the remote server. Connect to a remote telnet
848   server using a command line similar to:
850         curl telnet://remote.server.com
852   And enter the data to pass to the server on stdin. The result will be sent
853   to stdout or to the file you specify with -o.
855   You might want the -N/--no-buffer option to switch off the buffered output
856   for slow connections or similar.
858   Pass options to the telnet protocol negotiation, by using the -t option. To
859   tell the server we use a vt100 terminal, try something like:
861         curl -tTTYPE=vt100 telnet://remote.server.com
863   Other interesting options for it -t include:
865    - XDISPLOC=<X display> Sets the X display location.
867    - NEW_ENV=<var,val> Sets an environment variable.
869   NOTE: the telnet protocol does not specify any way to login with a specified
870   user and password so curl can't do that automatically. To do that, you need
871   to track when the login prompt is received and send the username and
872   password accordingly.
874 PERSISTENT CONNECTIONS
876   Specifying multiple files on a single command line will make curl transfer
877   all of them, one after the other in the specified order.
879   libcurl will attempt to use persistent connections for the transfers so that
880   the second transfer to the same host can use the same connection that was
881   already initiated and was left open in the previous transfer. This greatly
882   decreases connection time for all but the first transfer and it makes a far
883   better use of the network.
885   Note that curl cannot use persistent connections for transfers that are used
886   in subsequence curl invokes. Try to stuff as many URLs as possible on the
887   same command line if they are using the same host, as that'll make the
888   transfers faster. If you use a http proxy for file transfers, practically
889   all transfers will be persistent.
891 MULTIPLE TRANSFERS WITH A SINGLE COMMAND LINE
893   As is mentioned above, you can download multiple files with one command line
894   by simply adding more URLs. If you want those to get saved to a local file
895   instead of just printed to stdout, you need to add one save option for each
896   URL you specify. Note that this also goes for the -O option (but not
897   --remote-name-all).
899   For example: get two files and use -O for the first and a custom file
900   name for the second:
902     curl -O http://url.com/file.txt ftp://ftp.com/moo.exe -o moo.jpg
904   You can also upload multiple files in a similar fashion:
906     curl -T local1 ftp://ftp.com/moo.exe -T local2 ftp://ftp.com/moo2.txt
908 IPv6
910   curl will connect to a server with IPv6 when a host lookup returns an IPv6
911   address and fall back to IPv4 if the connection fails. The --ipv4 and --ipv6
912   options can specify which address to use when both are available. IPv6
913   addresses can also be specified directly in URLs using the syntax:
915     http://[2001:1890:1112:1::20]/overview.html
917   When this style is used, the -g option must be given to stop curl from
918   interpreting the square brackets as special globbing characters.  Link local
919   and site local addresses including a scope identifier, such as fe80::1234%1,
920   may also be used, but the scope portion must be numeric and the percent
921   character must be URL escaped. The previous example in an SFTP URL might
922   look like:
924     sftp://[fe80::1234%251]/
926   IPv6 addresses provided other than in URLs (e.g. to the --proxy, --interface
927   or --ftp-port options) should not be URL encoded.
930 MAILING LISTS
932   For your convenience, we have several open mailing lists to discuss curl,
933   its development and things relevant to this. Get all info at
934   http://curl.haxx.se/mail/. Some of the lists available are:
936   curl-users
938     Users of the command line tool. How to use it, what doesn't work, new
939     features, related tools, questions, news, installations, compilations,
940     running, porting etc.
942   curl-library
944     Developers using or developing libcurl. Bugs, extensions, improvements.
946   curl-announce
948     Low-traffic. Only receives announcements of new public versions. At worst,
949     that makes something like one or two mails per month, but usually only one
950     mail every second month.
952   curl-and-php
954     Using the curl functions in PHP. Everything curl with a PHP angle. Or PHP
955     with a curl angle.
957   curl-and-python
959     Python hackers using curl with or without the python binding pycurl.
961   Please direct curl questions, feature requests and trouble reports to one of
962   these mailing lists instead of mailing any individual.