1.12 I have a problem who can I chat with?
1.13 curl's ECCN number?
1.14 How do I submit my patch?
+ 1.15 How do I port libcurl to my OS?
2. Install Related Problems
2.1 configure doesn't find OpenSSL even when it is installed
2.2 Does curl work/build with other SSL libraries?
2.3 Where can I find a copy of LIBEAY32.DLL?
2.4 Does curl support SOCKS (RFC 1928) ?
+ 2.5 Install libcurl for both 32bit and 64bit?
3. Usage Problems
3.1 curl: (1) SSL is disabled, https: not supported
4.18 file:// URLs containing drive letters (Windows, NetWare)
4.19 Why doesn't cURL return an error when the network cable is unplugged?
4.20 curl doesn't return error for HTTP non-200 responses!
+ 4.21 Why is there a HTTP/1.1 in my HTTP/2 request?
5. libcurl Issues
5.1 Is libcurl thread-safe?
implement it for you, that is not a very friendly attitude. We spend a
considerable time already on maintaining and developing curl. In order to
get more out of us, you should consider trading in some of your time and
- efforts in return.
+ efforts in return. Simply go to the GitHub repo which resides at
+ https://github.com/curl/curl, fork the project, and create pull requests
+ with your proposed changes.
If you write the code, chances are bigger that it will get into curl faster.
We still get help from companies. Haxx provides web site, bandwidth, mailing
lists etc, sourceforge.net hosts project services we take advantage from,
- like the bug tracker and github hosts the primary git repository. Also
- again, some companies have sponsored certain parts of the development in the
- past and I hope some will continue to do so in the future.
+ like the bug tracker, and GitHub hosts the primary git repository at
+ https://github.com/curl/curl. Also again, some companies have sponsored
+ certain parts of the development in the past and I hope some will continue to
+ do so in the future.
If you want to support our project, consider a donation or a banner-program
or even better: by helping us coding, documenting, testing etc.
Please do not mail any single individual unless you really need to. Keep
curl-related questions on a suitable mailing list. All available mailing
lists are listed in the MANUAL document and online at
- http://curl.haxx.se/mail/
+ https://curl.haxx.se/mail/
Keeping curl-related questions and discussions on mailing lists allows
others to join in and help, to share their ideas, contribute their
your curl-related problems.
We list available alternatives on the curl web site:
- http://curl.haxx.se/support.html
+ https://curl.haxx.se/support.html
1.10 How many are using curl?
In May 2012 Daniel did a counting game and came up with a number that may
be completely wrong or somewhat accurate. Over 500 million!
- See http://daniel.haxx.se/blog/2012/05/16/300m-users/
+ See https://daniel.haxx.se/blog/2012/05/16/300m-users/
1.11 Why don't you update ca-bundle.crt
If you want the most recent collection of ca certs that Mozilla Firefox
uses, we recommend that you extract the collection yourself from Mozilla
Firefox (by running 'make ca-bundle), or by using our online service setup
- for this purpose: http://curl.haxx.se/docs/caextract.html
+ for this purpose: https://curl.haxx.se/docs/caextract.html
1.12 I have a problem who can I chat with?
cryptography. When doing so, the Export Control Classification Number (ECCN)
is used to identify the level of export control etc.
- ASF gives a good explanation at http://www.apache.org/dev/crypto.html
+ Apache Software Foundation gives a good explanation of ECCNs at
+ https://www.apache.org/dev/crypto.html
We believe curl's number might be ECCN 5D002, another possibility is
- 5D992. It seems necessary to write them, asking to confirm.
+ 5D992. It seems necessary to write them (the authority that administers ECCN
+ numbers), asking to confirm.
- Comprehensible explanations of the meaning of such numbers and how to
- obtain them (resp.) are here
+ Comprehensible explanations of the meaning of such numbers and how to obtain
+ them (resp.) are here
http://www.bis.doc.gov/licensing/exportingbasics.htm
http://www.bis.doc.gov/licensing/do_i_needaneccn.html
Lots of more details are found in the CONTRIBUTE and INTERNALS docs.
+ 1.15 How do I port libcurl to my OS?
+
+ Here's a rough step-by-step:
+
+ 1. copy a suitable lib/config-*.h file as a start to lib/config-[youros].h
+
+ 2. edit lib/config-[youros].h to match your OS and setup
+
+ 3. edit lib/curl_setup.h to include config-[youros].h when your OS is
+ detected by the preprocessor, in the style others already exist
+
+ 4. compile lib/*.c and make them into a library
+
2. Install Related Problems
GnuTLS, yassl, NSS, PolarSSL, axTLS, Secure Transport (native iOS/OS X),
WinSSL (native Windows) or GSKit (native IBM i). They all have their pros
and cons, and we try to maintain a comparison of them here:
- http://curl.haxx.se/docs/ssl-compared.html
+ https://curl.haxx.se/docs/ssl-compared.html
2.3 Where can I find a copy of LIBEAY32.DLL?
Yes, SOCKS 4 and 5 are supported.
+ 2.5 Install libcurl for both 32bit and 64bit?
+
+ In curl's configure procedure one of the regular include files get created
+ with platform specific information. The file 'curl/curlbuild.h' in the
+ installed libcurl file tree is therefore somewhat tied to that particular
+ platform.
+
+ To allow applications to get built for either 32bit or 64bit you need to
+ install libcurl headers for both setups and unfortunately curl doesn't do
+ this automatically.
+
+ A commonly used procedure is this:
+
+ $ ./configure [32bit platform]
+ $ mv curl/curlbuild.h curl/curlbuild-32bit.h
+ $ ./configure [64bit platform]
+ $ mv curl/curlbuild.h curl/curlbuild-64bit.h
+
+ Then you make a toplevel curl/curlbuild.h replacement that only does this:
+
+ #ifdef IS_32BIT
+ #include "curlbuild-32bit.h"
+ else
+ #include "curlbuild-64bit.h"
+ #endif
+
3. Usage problems
Find out more about which languages that support curl directly, and how to
install and use them, in the libcurl section of the curl web site:
- http://curl.haxx.se/libcurl/
+ https://curl.haxx.se/libcurl/
All the various bindings to libcurl are made by other projects and people,
outside of the cURL project. The cURL project itself only produces libcurl
certificate. Server certificate verification is enabled by default in curl
and libcurl and is often the reason for problems as explained in FAQ entry
4.12 and the SSLCERTS document
- (http://curl.haxx.se/docs/sslcerts.html). Server certificates that are
+ (https://curl.haxx.se/docs/sslcerts.html). Server certificates that are
"self-signed" or otherwise signed by a CA that you do not have a CA cert
for, cannot be verified. If the verification during a connect fails, you are
refused access. You then need to explicitly disable the verification to
request-body in a GET request with something like "curl -X GET -d data
[URL]"
- Note that -X doesn't change curl's behavior. It only modifies the actual
- string sent in the request.
+ Note that -X doesn't actually change curl's behavior as it only modifies the
+ actual string sent in the request, but that may of course trigger a
+ different set of events.
Accordingly, by using -XPOST on a command line that for example would follow
a 303 redirect, you will effectively prevent curl from behaving
this check.
Details are also in the SSLCERTS file in the release archives, found online
- here: http://curl.haxx.se/docs/sslcerts.html
+ here: https://curl.haxx.se/docs/sslcerts.html
4.13 Why is curl -R on Windows one hour off?
timeout is set.
See option TcpMaxConnectRetransmissions on this page:
- http://support.microsoft.com/?scid=kb%3Ben-us%3B175523&x=6&y=7
+ https://support.microsoft.com/en-us/kb/175523/en-us
Also, even on non-Windows systems there may run a firewall or anti-virus
software or similar that accepts the connection but does not actually do
You'll find that even if D:\blah.txt does exist, cURL returns a 'file
not found' error.
- According to RFC 1738 (http://www.faqs.org/rfcs/rfc1738.html),
+ According to RFC 1738 (https://www.ietf.org/rfc/rfc1738.txt),
file:// URLs must contain a host component, but it is ignored by
most implementations. In the above example, 'D:' is treated as the
host component, and is taken away. Thus, cURL tries to open '/blah.txt'.
In such cases, the TCP/IP stack is responsible for detecting when the
network connection is irrevocably lost. Since with some protocols it is
- perfectly legal for the client wait indefinitely for data, the stack may
+ perfectly legal for the client to wait indefinitely for data, the stack may
never report a problem, and even when it does, it can take up to 20 minutes
for it to detect an issue. The curl option --keepalive-time enables
keep-alive support in the TCP/IP stack which makes it periodically probe the
You can also use the -w option and the variable %{response_code} to extract
the exact response code that was return in the response.
+ 4.21 Why is there a HTTP/1.1 in my HTTP/2 request?
+
+ If you use verbose to see the HTTP request when you send off a HTTP/2
+ request, it will still say 1.1.
+
+ The reason for this is that we first generate the request to send using the
+ old 1.1 style and show that request in the verbose output, and then we
+ convert it over to the binary header-compressed HTTP/2 style. The actual
+ "1.1" part from that request is then not actually used in the transfer. The
+ binary HTTP/2 headers are not human readable.
5. libcurl Issues
If you use a OpenSSL-powered libcurl in a multi-threaded environment, you
need to provide one or two locking functions:
- http://www.openssl.org/docs/crypto/threads.html
+ https://www.openssl.org/docs/crypto/threads.html
If you use a GnuTLS-powered libcurl in a multi-threaded environment, you
need to provide locking function(s) for libgcrypt (which is used by GnuTLS
for the crypto functions).
- http://www.gnu.org/software/gnutls/manual/html_node/Multi_002dthreaded-applications.html
+ https://web.archive.org/web/20111103083330/http://www.gnu.org/software/gnutls/manual/html_node/Multi_002dthreaded-applications.html
No special locking is needed with a NSS-powered libcurl. NSS is thread-safe.
Also note that on many networks NATs or other IP-munging techniques are used
that makes you see and use a different IP address locally than what the
remote server will see you coming from. You may also consider using
- http://www.torproject.org .
+ https://www.torproject.org/ .
5.13 How do I stop an ongoing transfer?
to do "LIST -a" or similar to see them.
The application thus needs to parse the LIST output. One such existing
- list parser is available at http://cr.yp.to/ftpparse.html Versions of
+ list parser is available at https://cr.yp.to/ftpparse.html Versions of
libcurl since 7.21.0 also provide the ability to specify a wildcard to
download multiple files from one FTP directory.
notice" somewhere. Most probably like in the documentation or in the section
where other third party dependencies already are mentioned and acknowledged.
- As can be seen here: http://curl.haxx.se/docs/companies.html and elsewhere,
+ As can be seen here: https://curl.haxx.se/docs/companies.html and elsewhere,
more and more companies are discovering the power of libcurl and take
advantage of it even in commercial environments.
7.2 Who wrote PHP/CURL?
- PHP/CURL is a module that comes with the regular PHP package. It depends and
- uses libcurl, so you need to have libcurl installed properly first before
- PHP/CURL can be used. PHP/CURL was initially written by Sterling Hughes.
+ PHP/CURL was initially written by Sterling Hughes.
7.3 Can I perform multiple requests using the same handle?
unknown to me).
After a transfer, you just set new options in the handle and make another
- transfer. This will make libcurl to re-use the same connection if it can.
+ transfer. This will make libcurl re-use the same connection if it can.
+
+ 7.4 Does PHP/CURL have dependencies?
+
+ PHP/CURL is a module that comes with the regular PHP package. It depends on
+ and uses libcurl, so you need to have libcurl installed properly before
+ PHP/CURL can be used.