A Modern and Flexible Web Client for R

The curl() and curl_download() functions provide highly configurable drop-in replacements for base url() and download.file() with better performance, support for encryption (https, ftps), gzip compression, authentication, and other 'libcurl' goodies. The core of the package implements a framework for performing fully customized requests where data can be processed either in memory, on disk, or streaming via the callback or connection interfaces. Some knowledge of 'libcurl' is recommended; for a more-user-friendly web client see the 'httr' package which builds on this package with http specific tools and logic.



  • All interruptable handles now use a global pool to share connections. Fixes #79.
  • Enable interruptable interface by default, even in non-interactive mode.
  • Update libcurl on Windows to 7.51.0
  • Unit tests now try serveral httpbin mirrors in case one goes down
  • Support open(con, blocking = FALSE) and isIncomplete() for curl() connections
  • Switch curl_fetch_stream to non-blocking implementation


  • Fixed bug in multi that did not actually enable or disable multiplexing.
  • Switch unit tests to HTTP/2 server to get HTTP/2 testing coverage
  • Fix big endian build on GLIBC systems (tnx Aurelien Jarno and Andreas Tille)


  • If libcurl >= 7.47 and was built --with-nghttp2, automatically enable HTTP/2 on HTTPS connections (matches behavior of 'curl' cmd util)
  • Upgrade to libcurl 7.50.3 (--with-nghttp2) on Windows (Adds HTTP/2 support)
  • Fix a unit test that would fail on fast servers


  • New multi interface for concurrent async requests!
  • Updated vignette with simple multi examples
  • Export handle_data() to get handle state


  • Fix for getaddrinfo GNU extension on some unix platforms


  • Fix ASAN warning in curl.c (reference after free)


  • Fix for FreeBSD
  • Simplify handle refCount system
  • Better handle locking to prevent using/modifying open handles
  • Make unit tests always close connection to prevent 'unused connection' warnings
  • Add support for interruptions in curl_download()


  • The non-blocking download method is now only used in interactive mode
  • Use options(curl_interrupt = TRUE) to force nonblocking in non-interactive mode
  • Updated libcurl on windows to 7.47.1. This should fix IPv6 problems.
  • Update the curl_symbols table to 7.48


  • Use non-blocking code in curl_fetch_memory to support user interruptions.
  • Configure script no longer assumes bash so it works on OpenBSD.
  • Fix for Snow Leopard CRAN build server.
  • Added has_internet() function.


  • Added nslookup() as cross-platform alternative to nsl()


  • Move the creation of the option table to ./R/options.R
  • The curl_options() function gains an argument to filter by name
  • Properly invoke winhttp.def file in Makevars.win (required for new toolchain)


  • Refactor configure script to use pkg-config
  • Use the preprocessor to extract CURLOPT symbols during install
  • Don't use setInternet2() in R > 3.2.2


  • Optimization for windows to make realloc in curl_fetch_memory faster
  • Updated the curl_symbols table to 7.43
  • Updated the static libraries on Windows:
    • libcurl 7.43.0
    • openssl 1.0.2d
    • libssh2 1.6.0
    • libiconv 1.14-5
    • libidn 1.31-1
  • New functions for Windows: ie_proxy_info and ie_get_proxy_for_url


  • Convert url argument to utf8 strings in escape/unescape
  • Endian fix for BSD systems
  • Add support for setting curlopt_xxx_large options


  • Fix for very old versions of libcurl (RHEL 5)
  • Do not convert paths to UTF-8 (only URLs)
  • Improve error message for unknown options


  • Fix for curl() character reader to invert byte-order on big endian architectures.


  • Rename the C function 'fetch' to 'fetchdata' because of Solaris conflict.
  • Move warning about missing CA bundle on Windows to onAttach.


  • Validation of SSL certificates is now enabled by default if a bundle is available.
  • Major rewrite to support configurable and reusable handles
  • Added new_handle, handle_setopt, handle_setheaders, handle_setform, handle_reset, etc.
  • Added curl_fetch interfaces for httr
  • Add ie_proxy_settings to get system proxy configuration on windows


  • Check for CURLM_CALL_MULTI_PERFORM to support very old versions of libcurl


  • Fixed a memory bug that could cause R to crash
  • Add curl_escape, curl_unescape
  • Add curl_version and curl_options


  • Add curl_download function
  • More efficient use of realloc
  • Fix for older versions of libcurl (e.g. Snow Leopard)
  • Add support for user interrupts while downloading (ESC or CTRL+C)
  • Fixed bug that caused GC to corrupt connection object
  • Refactoring and cleanup


  • add support for recycling connections


  • initial release

Reference manual

It appears you don't have a PDF plugin for this browser. You can click here to download the reference manual.