cURL cURL > libcurl > libcurl Alternatives

Other HTTP/FTP client Libraries

Free Software and Open Source projects have a long tradition of forks and duplicate efforts. We enjoy "doing it ourselves", no matter if someone else has done something very similar already.

Alternative libraries that cover parts of libcurl's features:

libcurl (MIT)

    a highly portable and easy-to-use client-side URL transfer library, supporting DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET and TFTP. libcurl also supports HTTPS certificates, HTTP POST, HTTP PUT, FTP uploading, kerberos, HTTP form based upload, proxies, cookies, user+password authentication, file transfer resume, http proxy tunnelling and more!

libghttp (LGPL)

    Having a glance at libghttp (a gnome http library), it looks as if it works rather similar to libcurl (for http). There's no web page for this and the person who's email is mentioned in the README of the latest release I found claims he has passed the leadership of the project to "eazel". Popular choice among GNOME projects.
libwww (W3C license) comparison with libcurl
    More complex and harder to use than libcurl is. Includes everything from multi-threading to HTML parsing. The most notable transfer-related feature that libcurl does not offer but libwww does, is caching.
libferit (GPL)
    C++ library "for transferring files via http, ftp, gopher, proxy server". Based on 'snarf' 2.0.9-code (formerly known as libsnarf). Quote from freshmeat: "As the author of snarf, I have to say this frightens me. Snarf's networking system is far from robust and complete. It's probably full of bugs, and although it works for maybe 85% of all current situations, I wouldn't base a library on it."
neon (LGPL) comparison with neon
    An HTTP and WebDAV client library, with a C interface. I've mainly heard and seen people use this with WebDAV as their main interest. This is one of the two alternatives used by the Subversion project.
libsoup (LGPL) comparison with libcurl
    Part of glib (GNOME). Supports: HTTP 1.1, Persistent connections, Asynchronous DNS and transfers, Connection cache, Redirects, Basic, Digest, NTLM authentication, SSL with GnuTLS, Proxy support including SSL, POST data. Not portable. Lacks: cookie support, NTLM for proxies, GSS, gzip encoding, trailers in chunked responses, portability and more.
mozilla netlib (MPL)
    Handles URLs, protocols, transports for the Mozilla browser.
mozilla libxpnet (MPL)
    Minimal download library targeted to be much smaller than the above mentioned netlib. HTTP and FTP support.
wget (GPL)
    While not a library at all, I've been told that people sometimes extract the network code from it and base their own hacks from there.
libfetch (BSD)
    Does HTTP and FTP transfers (both ways), supports file: URLs, and an API for URL parsing. The utility fetch that is built on libfetch is an integral part of the FreeBSD operating system.
HTTP Fetcher (LGPL)
    "a small, robust, flexible library for downloading files via HTTP using the GET method."
http-tiny (Artistic License)
    "a very small C library to make http queries (GET, HEAD, PUT, DELETE, etc.) easily portable and embeddable"
wininet comparison with libcurl
    "The Windows Internet (WinINet) application programming interface (API) enables applications to interact with Gopher, FTP, and HTTP protocols to access Internet resources."
XMLHTTP Object also known as IXMLHTTPRequest (part of MSXML 3.0)
    (Windows) Provides client-side protocol support for communication with HTTP servers. A client computer can use the XMLHTTP object to send an arbitrary HTTP request, receive the response, and have the Microsoft® XML Document Object Model (DOM) parse that response.
QHttp (GPL)
    QHttp is a class in the Qt library from Troll Tech. Seems to be restricted to plain HTTP. Supports GET, POST and proxy. Asynchronous.
ftplib (GPL)
    "a set of routines that implement the FTP protocol. They allow applications to create and access remote files through function calls instead of needing to fork and exec an interactive ftp client program."
    I stopped using it because it did not evolve and the maintainer did not even answer to my e-mailed patches and forum posts. The web site seems abandoned and the forum is not reachable anymore. It is simpler to use than libcurl, because it is not based on callbacks. But is is also much less powerful. / Patrick
ftplib++ (GPL)
    A C++ library for "easy FTP client functionality. It features resuming of up- and downloads, FXP support, SSL/TLS encryption, and logging functionality."
GNU Common C++ library
    Has a URLStream class. This C++ class allow you to download a file using HTTP. See demo/urlfetch.cpp in commoncpp2-1.3.19.tar.gz
HTTPClient (LGPL)
    Java HTTP client library.
Jakarta Commons HttpClient (Apache License)
    A Java HTTP client library written by the Jakarta project.
gnetlibrary (LGPL)
    "a simple network library. It is written in C, object-oriented, and built upon GLib. It is intended to be easy to use and port". Features a HTTP component. It uses glib, and integrates very well within Gtk+ applications, which require event-driven programming.
Serf (Apache License)
    "The serf library is a C-based HTTP client library built upon the Apache Portable Runtime (APR) library. It multiplexes connections, running the read/write communication asynchronously." This is one of the two alternatives used by the Subversion project.
qDecoder (BSD)
    qDecoder is a development kit for C/C++ network programming includes simple HTTP client API.

Have you tried programming with one of the other libs and care share your experiences? We'd love to make this collection more complete and feature lengthier comments about each lib.