libcurl - What Makes It Special
Solid and Reliable!
libcurl was released in its current "incarnation" in the year 2000 and it has been in constant use by a large number of applications and companies ever since. Sure there have been bugs and even a few security-related flaws, but it has remained a very solid and reliable library and lots of users are still using libcurl versions released many years ago as they stick with what works.
libcurl is the most used C-based highly portable transfer library in the world. Some of the world's biggest companies use libcurl in high volume applications. Some of the open source applications using libcurl are very widely used.
libcurl has been ported to numerous platforms and CPUs. libcurl offers the same API and feature set on all of them! Using libcurl assures you that you can write your application to work on very large amount of systems, including but not limited to Solaris, NetBSD, FreeBSD, OpenBSD, Darwin, HPUX, IRIX, AIX, Tru64, Linux, UnixWare, HURD, Windows, Amiga, OS/2, BeOs, Mac OS X, Ultrix, QNX, OpenVMS, RISC OS, Novell NetWare, DOS and more...
libcurl is designed and implemented entirely thread safe. There are some considerations to keep in mind when using libcurl in multiple threads though, as mentioned below:
Never share libcurl handles between multiple threads. You should only use one handle in one single thread at any given time. You can still share certain data between multiple threads by using the share interface.
libcurl uses certain system calls to obtain information. Some of the most crucial ones are the name resoluition calls (the gethostby* family). It is very important that libcurl found and can use thread safe versions of these and other system calls, as otherwise it can't function fully thread safe.
Some operating systems are known to have faulty thread implementations. We have previously received problem reports on *BSD (at least in the past, they may be working fine these days). Some operating systems that are known to have solid and working thread support are Linux, Solaris and Windows.
Further, if you use any SSL/TLS-based protocol (HTTPS or FTPS) you need to setup OpenSSL or GnuTLS callbacks for synch. See the libcurl-tutorial(3) man page for details.
Unmatched Set of Features!
There simply is no other HTTP and FTP library that can boast the same amount and set of features that libcurl does. Be it free or commercial.
Also, libcurl's unique offer of both a pull and push interface allows applications to use it exactly the way they please.
If compiled with IPv6 support enabled, All protocols work splendidly on IPv6 stacks. There are some minor quirks to keep in mind: kerberos4 does not work over IPv6 by design and the SOCKS4 support is not properly adapted for IPv6.
There is nothing in particular needed to get IPv6 to be used, the library API remains exactly the same and adjusts to IPv4/Ipv6 dynamicly. You can use host names that only have AAAA DNS records, or you can use IPv6 IP-only style addresses like [::1].
We claim libcurl is well supported because you can get help on one of the mailing lists, very quickly and accurately. Often within a few hours. Having the mailing list archives available on the web also makes them searchable and allows you to find already mentioned solutions and answers.
We have a public bug tracker and known bugs are mostly fixed very swiftly.
We also provide very detailed documentation on all operations, not just in every release archive but also available on the web site(s).
You can get paid support from one of the listed curl support companies.
Tests performed by independent users, have proved libcurl to be equally fast, up to a lot faster than libwww in comparable test cases.
When using libcurl bindings, you will get unmatched speeds due to libcurl being programmed in C and very often the language-specific alternatives (be it perl, Python, PHP, tcl or whatever) are much slower.
TODO: add references to hard facts here. If you have any or know any comparisons with real-world numbers, then please let us know!
All functions in libcurl have their own detailed man pages describing their actual functionality and purpose.
There is a libcurl tutorial.
We have numerous commented source code examples.
Stable API and ABI
In the libcurl development we take API and ABI stability very seriously. We have a few rules when it comes to API and ABI compatibility and they are:
- We don't break API or ABI compatibility
- Seriously, we really don't and we work very hard to provide alternatives that introduce new ways instead of breaking old
- A few times in the beginning of our project we felt forced to break existing behavior and we did API and ABI bumps. It was painful and hard and bad and we really really don't want to do it again. Ever! We have not done it since 2006.