README.curl is renamed to MANUAL
[platform/upstream/curl.git] / docs / MANUAL
1 LATEST VERSION
2
3   You always find news about what's going on as well as the latest versions
4   from the curl web pages, located at:
5
6         http://curl.haxx.se
7
8 SIMPLE USAGE
9
10   Get the main page from netscape's web-server:
11
12         curl http://www.netscape.com/
13
14   Get the root README file from funet's ftp-server:
15
16         curl ftp://ftp.funet.fi/README
17
18   Get a gopher document from funet's gopher server:
19
20         curl gopher://gopher.funet.fi
21
22   Get a web page from a server using port 8000:
23
24         curl http://www.weirdserver.com:8000/
25
26   Get a list of the root directory of an FTP site:
27
28         curl ftp://ftp.fts.frontec.se/
29
30   Get the definition of curl from a dictionary:
31
32         curl dict://dict.org/m:curl
33
34 DOWNLOAD TO A FILE
35
36   Get a web page and store in a local file:
37
38         curl -o thatpage.html http://www.netscape.com/
39
40   Get a web page and store in a local file, make the local file get the name
41   of the remote document (if no file name part is specified in the URL, this
42   will fail):
43
44         curl -O http://www.netscape.com/index.html
45
46 USING PASSWORDS
47
48  FTP
49
50    To ftp files using name+passwd, include them in the URL like:
51
52         curl ftp://name:passwd@machine.domain:port/full/path/to/file
53
54    or specify them with the -u flag like
55
56         curl -u name:passwd ftp://machine.domain:port/full/path/to/file
57
58  HTTP
59
60    The HTTP URL doesn't support user and password in the URL string. Curl
61    does support that anyway to provide a ftp-style interface and thus you can
62    pick a file like:
63
64         curl http://name:passwd@machine.domain/full/path/to/file
65
66    or specify user and password separately like in
67
68         curl -u name:passwd http://machine.domain/full/path/to/file
69
70    NOTE! Since HTTP URLs don't support user and password, you can't use that
71    style when using Curl via a proxy. You _must_ use the -u style fetch
72    during such circumstances.
73
74  HTTPS
75
76    Probably most commonly used with private certificates, as explained below.
77
78  GOPHER
79
80    Curl features no password support for gopher.
81
82 PROXY
83
84  Get an ftp file using a proxy named my-proxy that uses port 888:
85
86         curl -x my-proxy:888 ftp://ftp.leachsite.com/README
87
88  Get a file from a HTTP server that requires user and password, using the
89  same proxy as above:
90
91         curl -u user:passwd -x my-proxy:888 http://www.get.this/
92
93  Some proxies require special authentication. Specify by using -U as above:
94
95         curl -U user:passwd -x my-proxy:888 http://www.get.this/
96
97  See also the environment variables Curl support that offer further proxy
98  control.
99
100 RANGES
101
102   With HTTP 1.1 byte-ranges were introduced. Using this, a client can request
103   to get only one or more subparts of a specified document. Curl supports
104   this with the -r flag.
105
106   Get the first 100 bytes of a document:
107
108         curl -r 0-99 http://www.get.this/
109
110   Get the last 500 bytes of a document:
111
112         curl -r -500 http://www.get.this/
113
114   Curl also supports simple ranges for FTP files as well. Then you can only
115   specify start and stop position.
116
117   Get the first 100 bytes of a document using FTP:
118
119         curl -r 0-99 ftp://www.get.this/README  
120
121 UPLOADING
122
123  FTP
124
125   Upload all data on stdin to a specified ftp site:
126
127         curl -t ftp://ftp.upload.com/myfile
128
129   Upload data from a specified file, login with user and password:
130
131         curl -T uploadfile -u user:passwd ftp://ftp.upload.com/myfile
132
133   Upload a local file to the remote site, and use the local file name remote
134   too:
135  
136         curl -T uploadfile -u user:passwd ftp://ftp.upload.com/
137
138   Upload a local file to get appended to the remote file using ftp:
139
140         curl -T localfile -a ftp://ftp.upload.com/remotefile
141
142   Curl also supports ftp upload through a proxy, but only if the proxy is
143   configured to allow that kind of tunneling. If it does, you can run curl in
144   a fashion similar to:
145
146         curl --proxytunnel -x proxy:port -T localfile ftp.upload.com
147
148  HTTP
149
150   Upload all data on stdin to a specified http site:
151
152         curl -t http://www.upload.com/myfile
153
154   Note that the http server must've been configured to accept PUT before this
155   can be done successfully.
156
157   For other ways to do http data upload, see the POST section below.
158
159 VERBOSE / DEBUG
160
161   If curl fails where it isn't supposed to, if the servers don't let you
162   in, if you can't understand the responses: use the -v flag to get VERBOSE
163   fetching. Curl will output lots of info and all data it sends and
164   receives in order to let the user see all client-server interaction.
165
166         curl -v ftp://ftp.upload.com/
167
168 DETAILED INFORMATION
169
170   Different protocols provide different ways of getting detailed information
171   about specific files/documents. To get curl to show detailed information
172   about a single file, you should use -I/--head option. It displays all
173   available info on a single file for HTTP and FTP. The HTTP information is a
174   lot more extensive.
175
176   For HTTP, you can get the header information (the same as -I would show)
177   shown before the data by using -i/--include. Curl understands the
178   -D/--dump-header option when getting files from both FTP and HTTP, and it
179   will then store the headers in the specified file.
180
181   Store the HTTP headers in a separate file:
182
183         curl --dump-header headers.txt curl.haxx.se
184
185   Note that headers stored in a separate file can be very useful at a later
186   time if you want curl to use cookies sent by the server. More about that in
187   the cookies section.
188
189 POST (HTTP)
190
191   It's easy to post data using curl. This is done using the -d <data>
192   option.  The post data must be urlencoded.
193
194   Post a simple "name" and "phone" guestbook.
195
196         curl -d "name=Rafael%20Sagula&phone=3320780" \
197                 http://www.where.com/guest.cgi
198
199   How to post a form with curl, lesson #1:
200
201   Dig out all the <input> tags in the form that you want to fill in. (There's
202   a perl program called formfind.pl on the curl site that helps with this).
203
204   If there's a "normal" post, you use -d to post. -d takes a full "post
205   string", which is in the format
206
207         <variable1>=<data1>&<variable2>=<data2>&...
208
209   The 'variable' names are the names set with "name=" in the <input> tags, and
210   the data is the contents you want to fill in for the inputs. The data *must*
211   be properly URL encoded. That means you replace space with + and that you
212   write weird letters with %XX where XX is the hexadecimal representation of
213   the letter's ASCII code.
214
215   Example:
216
217   (page located at http://www.formpost.com/getthis/
218
219         <form action="post.cgi" method="post">
220         <input name=user size=10>
221         <input name=pass type=password size=10>
222         <input name=id type=hidden value="blablabla">
223         <input name=ding value="submit">
224         </form>
225
226   We want to enter user 'foobar' with password '12345'.
227
228   To post to this, you enter a curl command line like:
229
230         curl -d "user=foobar&pass=12345&id=blablabla&dig=submit"  (continues)
231           http://www.formpost.com/getthis/post.cgi
232
233
234   While -d uses the application/x-www-form-urlencoded mime-type, generally
235   understood by CGI's and similar, curl also supports the more capable
236   multipart/form-data type. This latter type supports things like file upload.
237
238   -F accepts parameters like -F "name=contents". If you want the contents to
239   be read from a file, use <@filename> as contents. When specifying a file,
240   you can also specify which content type the file is, by appending
241   ';type=<mime type>' to the file name. You can also post contents of several
242   files in one field. So that the field name 'coolfiles' can be sent three
243   files with different content types in a manner similar to:
244
245         curl -F "coolfiles=@fil1.gif;type=image/gif,fil2.txt,fil3.html" \
246         http://www.post.com/postit.cgi
247
248   If content-type is not specified, curl will try to guess from the extension
249   (it only knows a few), or use the previously specified type (from an earlier
250   file if several files are specified in a list) or finally using the default
251   type 'text/plain'.
252
253   Emulate a fill-in form with -F. Let's say you fill in three fields in a
254   form. One field is a file name which to post, one field is your name and one
255   field is a file description. We want to post the file we have written named
256   "cooltext.txt". To let curl do the posting of this data instead of your
257   favourite browser, you have to check out the HTML of the form page to get to
258   know the names of the input fields. In our example, the input field names are
259   'file', 'yourname' and 'filedescription'.
260
261         curl -F "file=@cooltext.txt" -F "yourname=Daniel" \
262              -F "filedescription=Cool text file with cool text inside" \
263              http://www.post.com/postit.cgi
264
265   So, to send two files in one post you can do it in two ways:
266
267   1. Send multiple files in a single "field" with a single field name:
268  
269         curl -F "pictures=@dog.gif,cat.gif" 
270  
271   2. Send two fields with two field names: 
272
273         curl -F "docpicture=@dog.gif" -F "catpicture=@cat.gif" 
274
275 REFERER
276
277   A HTTP request has the option to include information about which address
278   that referred to actual page, and curl allows the user to specify that
279   referrer to get specified on the command line. It is especially useful to
280   fool or trick stupid servers or CGI scripts that rely on that information
281   being available or contain certain data.
282
283         curl -e www.coolsite.com http://www.showme.com/
284
285 USER AGENT
286
287   A HTTP request has the option to include information about the browser
288   that generated the request. Curl allows it to be specified on the command
289   line. It is especially useful to fool or trick stupid servers or CGI
290   scripts that only accept certain browsers.
291
292   Example:
293
294   curl -A 'Mozilla/3.0 (Win95; I)' http://www.nationsbank.com/
295
296   Other common strings:
297     'Mozilla/3.0 (Win95; I)'     Netscape Version 3 for Windows 95
298     'Mozilla/3.04 (Win95; U)'    Netscape Version 3 for Windows 95
299     'Mozilla/2.02 (OS/2; U)'     Netscape Version 2 for OS/2
300     'Mozilla/4.04 [en] (X11; U; AIX 4.2; Nav)'           NS for AIX
301     'Mozilla/4.05 [en] (X11; U; Linux 2.0.32 i586)'      NS for Linux
302
303   Note that Internet Explorer tries hard to be compatible in every way:
304     'Mozilla/4.0 (compatible; MSIE 4.01; Windows 95)'    MSIE for W95
305
306   Mozilla is not the only possible User-Agent name:
307     'Konqueror/1.0'             KDE File Manager desktop client
308     'Lynx/2.7.1 libwww-FM/2.14' Lynx command line browser
309
310 COOKIES
311
312   Cookies are generally used by web servers to keep state information at the
313   client's side. The server sets cookies by sending a response line in the
314   headers that looks like 'Set-Cookie: <data>' where the data part then
315   typically contains a set of NAME=VALUE pairs (separated by semicolons ';'
316   like "NAME1=VALUE1; NAME2=VALUE2;"). The server can also specify for what
317   path the "cookie" should be used for (by specifying "path=value"), when the
318   cookie should expire ("expire=DATE"), for what domain to use it
319   ("domain=NAME") and if it should be used on secure connections only
320   ("secure").
321
322   If you've received a page from a server that contains a header like:
323         Set-Cookie: sessionid=boo123; path="/foo";
324
325   it means the server wants that first pair passed on when we get anything in
326   a path beginning with "/foo".
327
328   Example, get a page that wants my name passed in a cookie:
329
330         curl -b "name=Daniel" www.sillypage.com
331
332   Curl also has the ability to use previously received cookies in following
333   sessions. If you get cookies from a server and store them in a file in a
334   manner similar to:
335
336         curl --dump-header headers www.example.com
337
338   ... you can then in a second connect to that (or another) site, use the
339   cookies from the 'headers' file like:
340
341         curl -b headers www.example.com
342
343   Note that by specifying -b you enable the "cookie awareness" and with -L
344   you can make curl follow a location: (which often is used in combination
345   with cookies). So that if a site sends cookies and a location, you can
346   use a non-existing file to trig the cookie awareness like:
347
348         curl -L -b empty-file www.example.com
349
350   The file to read cookies from must be formatted using plain HTTP headers OR
351   as netscape's cookie file. Curl will determine what kind it is based on the
352   file contents.
353
354 PROGRESS METER
355
356   The progress meter exists to show a user that something actually is
357   happening. The different fields in the output have the following meaning:
358
359   % Total    % Received % Xferd  Average Speed          Time             Curr.
360                                  Dload  Upload Total    Current  Left    Speed
361   0  151M    0 38608    0     0   9406      0  4:41:43  0:00:04  4:41:39  9287
362
363   From left-to-right:
364    %             - percentage completed of the whole transfer
365    Total         - total size of the whole expected transfer
366    %             - percentage completed of the download
367    Received      - currently downloaded amount of bytes
368    %             - percentage completed of the upload
369    Xferd         - currently uploaded amount of bytes
370    Average Speed
371    Dload         - the average transfer speed of the download
372    Average Speed
373    Upload        - the average transfer speed of the upload
374    Time Total    - expected time to complete the operation
375    Time Current  - time passed since the invoke
376    Time Left     - expected time left to completetion
377    Curr.Speed    - the average transfer speed the last 5 seconds (the first
378                    5 seconds of a transfer is based on less time of course.)
379
380   The -# option will display a totally different progress bar that doesn't
381   need much explanation!
382
383 SPEED LIMIT
384
385   Curl offers the user to set conditions regarding transfer speed that must
386   be met to let the transfer keep going. By using the switch -y and -Y you
387   can make curl abort transfers if the transfer speed doesn't exceed your
388   given lowest limit for a specified time.
389
390   To let curl abandon downloading this page if its slower than 3000 bytes per
391   second for 1 minute, run:
392
393         curl -y 3000 -Y 60 www.far-away-site.com
394
395   This can very well be used in combination with the overall time limit, so
396   that the above operatioin must be completed in whole within 30 minutes:
397
398         curl -m 1800 -y 3000 -Y 60 www.far-away-site.com
399
400 CONFIG FILE
401
402   Curl automatically tries to read the .curlrc file (or _curlrc file on win32
403   systems) from the user's home dir on startup.
404
405   The config file could be made up with normal command line switches, but you
406   can also specify the long options without the dashes to make it more
407   readable. You can separate the options and the parameter with spaces, or
408   with = or :. Comments can be used within the file. If the first letter on a
409   line is a '#'-letter the rest of the line is treated as a comment.
410
411   If you want the parameter to contain spaces, you must inclose the entire
412   parameter within double quotes ("). Within those quotes, you specify a
413   quote as \".
414
415   NOTE: You must specify options and their arguments on the same line.
416
417   Example, set default time out and proxy in a config file:
418
419         # We want a 30 minute timeout:
420         -m 1800
421         # ... and we use a proxy for all accesses:
422         proxy = proxy.our.domain.com:8080
423
424   White spaces ARE significant at the end of lines, but all white spaces
425   leading up to the first characters of each line are ignored.
426
427   Prevent curl from reading the default file by using -q as the first command
428   line parameter, like:
429
430         curl -q www.thatsite.com
431
432   Force curl to get and display a local help page in case it is invoked
433   without URL by making a config file similar to:
434
435         # default url to get
436         url = "http://help.with.curl.com/curlhelp.html"
437
438   You can specify another config file to be read by using the -K/--config
439   flag. If you set config file name to "-" it'll read the config from stdin,
440   which can be handy if you want to hide options from being visible in process
441   tables etc:
442
443         echo "user = user:passwd" | curl -K - http://that.secret.site.com
444
445 EXTRA HEADERS
446
447   When using curl in your own very special programs, you may end up needing
448   to pass on your own custom headers when getting a web page. You can do
449   this by using the -H flag.
450
451   Example, send the header "X-you-and-me: yes" to the server when getting a
452   page:
453
454         curl -H "X-you-and-me: yes" www.love.com
455
456   This can also be useful in case you want curl to send a different text in
457   a header than it normally does. The -H header you specify then replaces the
458   header curl would normally send.
459
460 FTP and PATH NAMES
461
462   Do note that when getting files with the ftp:// URL, the given path is
463   relative the directory you enter. To get the file 'README' from your home
464   directory at your ftp site, do:
465
466         curl ftp://user:passwd@my.site.com/README
467
468   But if you want the README file from the root directory of that very same
469   site, you need to specify the absolute file name:
470
471         curl ftp://user:passwd@my.site.com//README
472
473   (I.e with an extra slash in front of the file name.)
474
475 FTP and firewalls
476
477   The FTP protocol requires one of the involved parties to open a second
478   connction as soon as data is about to get transfered. There are two ways to
479   do this.
480
481   The default way for curl is to issue the PASV command which causes the
482   server to open another port and await another connection performed by the
483   client. This is good if the client is behind a firewall that don't allow
484   incoming connections.
485
486         curl ftp.download.com
487
488   If the server for example, is behind a firewall that don't allow connections
489   on other ports than 21 (or if it just doesn't support the PASV command), the
490   other way to do it is to use the PORT command and instruct the server to
491   connect to the client on the given (as parameters to the PORT command) IP
492   number and port.
493
494   The -P flag to curl supports a few different options. Your machine may have
495   several IP-addresses and/or network interfaces and curl allows you to select
496   which of them to use. Default address can also be used:
497
498         curl -P - ftp.download.com
499
500   Download with PORT but use the IP address of our 'le0' interface (this does
501   not work on windows):
502
503         curl -P le0 ftp.download.com
504
505   Download with PORT but use 192.168.0.10 as our IP address to use:
506
507         curl -P 192.168.0.10 ftp.download.com
508
509 NETWORK INTERFACE
510
511   Get a web page from a server using a specified port for the interface:
512
513         curl --interface eth0:1 http://www.netscape.com/
514
515   or
516
517         curl --interface 192.168.1.10 http://www.netscape.com/
518
519 HTTPS
520
521   Secure HTTP requires SSL libraries to be installed and used when curl is
522   built. If that is done, curl is capable of retrieving and posting documents
523   using the HTTPS procotol.
524
525   Example:
526
527         curl https://www.secure-site.com
528
529   Curl is also capable of using your personal certificates to get/post files
530   from sites that require valid certificates. The only drawback is that the
531   certificate needs to be in PEM-format. PEM is a standard and open format to
532   store certificates with, but it is not used by the most commonly used
533   browsers (Netscape and MSEI both use the so called PKCS#12 format). If you
534   want curl to use the certificates you use with your (favourite) browser, you
535   may need to download/compile a converter that can convert your browser's
536   formatted certificates to PEM formatted ones. This kind of converter is
537   included in recent versions of OpenSSL, and for older versions Dr Stephen
538   N. Henson has written a patch for SSLeay that adds this functionality. You
539   can get his patch (that requires an SSLeay installation) from his site at:
540   http://www.drh-consultancy.demon.co.uk/
541
542   Example on how to automatically retrieve a document using a certificate with
543   a personal password:
544
545         curl -E /path/to/cert.pem:password https://secure.site.com/
546
547   If you neglect to specify the password on the command line, you will be
548   prompted for the correct password before any data can be received.
549
550   Many older SSL-servers have problems with SSLv3 or TLS, that newer versions
551   of OpenSSL etc is using, therefore it is sometimes useful to specify what
552   SSL-version curl should use. Use -3 or -2 to specify that exact SSL version
553   to use:
554
555         curl -2 https://secure.site.com/
556
557   Otherwise, curl will first attempt to use v3 and then v2.
558
559   To use OpenSSL to convert your favourite browser's certificate into a PEM
560   formatted one that curl can use, do something like this (assuming netscape,
561   but IE is likely to work similarly):
562
563     You start with hitting the 'security' menu button in netscape. 
564
565     Select 'certificates->yours' and then pick a certificate in the list 
566
567     Press the 'export' button 
568
569     enter your PIN code for the certs 
570
571     select a proper place to save it 
572
573     Run the 'openssl' application to convert the certificate. If you cd to the
574     openssl installation, you can do it like:
575
576      # ./apps/openssl pkcs12 -certfile [file you saved] -out [PEMfile]
577
578
579 RESUMING FILE TRANSFERS
580
581  To continue a file transfer where it was previously aborted, curl supports
582  resume on http(s) downloads as well as ftp uploads and downloads.
583
584  Continue downloading a document:
585
586         curl -c -o file ftp://ftp.server.com/path/file
587
588  Continue uploading a document(*1):
589
590         curl -c -T file ftp://ftp.server.com/path/file
591
592  Continue downloading a document from a web server(*2):
593
594         curl -c -o file http://www.server.com/
595
596  (*1) = This requires that the ftp server supports the non-standard command
597         SIZE. If it doesn't, curl will say so.
598
599  (*2) = This requires that the wb server supports at least HTTP/1.1. If it
600         doesn't, curl will say so.
601
602 TIME CONDITIONS
603
604  HTTP allows a client to specify a time condition for the document it
605  requests. It is If-Modified-Since or If-Unmodified-Since. Curl allow you to
606  specify them with the -z/--time-cond flag.
607
608  For example, you can easily make a download that only gets performed if the
609  remote file is newer than a local copy. It would be made like:
610
611         curl -z local.html http://remote.server.com/remote.html
612
613  Or you can download a file only if the local file is newer than the remote
614  one. Do this by prepending the date string with a '-', as in:
615
616         curl -z -local.html http://remote.server.com/remote.html
617
618  You can specify a "free text" date as condition. Tell curl to only download
619  the file if it was updated since yesterday:
620
621         curl -z yesterday http://remote.server.com/remote.html
622
623  Curl will then accept a wide range of date formats. You always make the date
624  check the other way around by prepending it with a dash '-'.
625
626 DICT
627
628   For fun try
629
630         curl dict://dict.org/m:curl
631         curl dict://dict.org/d:heisenbug:jargon
632         curl dict://dict.org/d:daniel:web1913
633
634   Aliases for 'm' are 'match' and 'find', and aliases for 'd' are 'define'
635   and 'lookup'. For example,
636
637         curl dict://dict.org/find:curl
638
639   Commands that break the URL description of the RFC (but not the DICT
640   protocol) are
641
642         curl dict://dict.org/show:db
643         curl dict://dict.org/show:strat
644
645   Authentication is still missing (but this is not required by the RFC)
646
647 LDAP
648
649   If you have installed the OpenLDAP library, curl can take advantage of it
650   and offer ldap:// support.
651
652   LDAP is a complex thing and writing an LDAP query is not an easy task. I do
653   advice you to dig up the syntax description for that elsewhere, RFC 1959 if
654   no other place is better.
655
656   To show you an example, this is now I can get all people from my local LDAP
657   server that has a certain sub-domain in their email address:
658
659         curl -B "ldap://ldap.frontec.se/o=frontec??sub?mail=*sth.frontec.se"
660
661   If I want the same info in HTML format, I can get it by not using the -B
662   (enforce ASCII) flag.
663
664 ENVIRONMENT VARIABLES
665
666   Curl reads and understands the following environment variables:
667
668         HTTP_PROXY, HTTPS_PROXY, FTP_PROXY, GOPHER_PROXY
669
670   They should be set for protocol-specific proxies. General proxy should be
671   set with
672         
673         ALL_PROXY
674
675   A comma-separated list of host names that shouldn't go through any proxy is
676   set in (only an asterisk, '*' matches all hosts)
677
678         NO_PROXY
679
680   If a tail substring of the domain-path for a host matches one of these
681   strings, transactions with that node will not be proxied.
682
683
684   The usage of the -x/--proxy flag overrides the environment variables.
685
686 NETRC
687
688   Unix introduced the .netrc concept a long time ago. It is a way for a user
689   to specify name and password for commonly visited ftp sites in a file so
690   that you don't have to type them in each time you visit those sites. You
691   realize this is a big security risk if someone else gets hold of your
692   passwords, so therefor most unix programs won't read this file unless it is
693   only readable by yourself (curl doesn't care though).
694
695   Curl supports .netrc files if told so (using the -n/--netrc option). This is
696   not restricted to only ftp, but curl can use it for all protocols where
697   authentication is used.
698
699   A very simple .netrc file could look something like:
700
701         machine curl.haxx.se login iamdaniel password mysecret
702
703 CUSTOM OUTPUT
704
705   To better allow script programmers to get to know about the progress of
706   curl, the -w/--write-out option was introduced. Using this, you can specify
707   what information from the previous transfer you want to extract.
708
709   To display the amount of bytes downloaded together with some text and an
710   ending newline:
711
712         curl -w 'We downloaded %{size_download} bytes\n' www.download.com
713
714 KERBEROS4 FTP TRANSFER
715
716   Curl supports kerberos4 for FTP transfers. You need the kerberos package
717   installed and used at curl build time for it to be used.
718
719   First, get the krb-ticket the normal way, like with the kauth tool. Then use
720   curl in way similar to:
721
722         curl --krb4 private ftp://krb4site.com -u username:fakepwd
723
724   There's no use for a password on the -u switch, but a blank one will make
725   curl ask for one and you already entered the real password to kauth.
726
727 MAILING LIST
728
729   We have an open mailing list to discuss curl, its development and things
730   relevant to this.
731
732   To subscribe, mail curl-request@contactor.se with "subscribe <fill in your
733   email address>" in the body.
734
735   To post to the list, mail curl@contactor.se.
736
737   To unsubcribe, mail curl-request@contactor.se with "unsubscribe <your
738   subscribed email address>" in the body.
739