cURL

curl's project page on SourceForge.net

Sponsors:
Haxx

cURL > libcurl > What Makes It Special

libcurl - What Makes It Special

Related:
License

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.

Widely Used!

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.

We estimate that the amount of users who frequently use (lib)curl, knowingly or not, is well over one million.

Portable!

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...

Thread Safe!

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.

libcurl also offers an unmatched set of bindings, enabling you to access and use libcurl from basically whatever language you can think of!

Supports IPv6!

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].

Well Supported!

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.

Since the code is free and available, any skilled programmer can fix and improve the tool and library whenever. If you can't, you can hire one!

Fast!

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!

Thoroughly Documented!

All functions in libcurl have their own detailed man pages describing their actual functionality and purpose.

All interfaces have overview-style man pages describing the concepts that glue all the functions together: easy, multi and share.

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:

  1. We don't break API or ABI compatibility
  2. Seriously, we really don't and we work very hard to provide alternatives that introduce new ways instead of breaking old
  3. 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.

donate! Page updated March 21, 2014.
web site info

File upload with ASP.NET