Changes in version 7.1.0 (2026-04-22) o Everything now works out of the box under emscripten (webR) by automatically bootstrapping a ws gateway. o Increase max size of string returned by ie_proxy_info() to 65536 o Fix a unit test for libcurl 8.20 Changes in version 7.0.0 (2025-08-19) o Major cleanup: packge now requires libcurl >= 7.73. Removed all conditioning and fallbacks for older libcurl versions (#413). o Removed the fallback ADA parser and unconditinoally use the curl URL parser. o Removed the legacy type-checking code as we can unconditionally use the easy- option API. o Support option('netrc') to match base R >= 4.6.0. o Setting any value in curl_modify_url() to NA or "" will now unset it. Changes in version 6.4.0 (2025-06-22) o Vendor a static libcurl on RHEL/CentOS/Rocky 7 and 8 because stock version is too old now to support most functionality. o curl_modify_url() and curl_parse_url() now force uppercase percentage codes for url-encoding to match curl_escape() o Error messages are now printed with a linebreak in between. o Better documentation for handle_setform() and handle_getdata() Changes in version 6.3.0 (2025-06-06) o New function curl_modify_url() o MacOS/Windows: update to libcurl 8.14.1 o MacOS: our static build of libcurl now links to the MacOS native LibreSSL and nghttp in order to use the same keychain certificates as native curl. Changes in version 6.2.3 (2025-05-24) o Non blocking connections now wait for 10ms before returning no data to prevent busy waiting when readBin is called in a loop. See #399 o Fix a flaky unit test Changes in version 6.2.2 (2025-03-24) o Fix a unit test for libcurl 8.13.0 o Cleanup build Changes in version 6.2.1 (2025-02-19) o Workaround for change of behavior in libcurl 8.12.0 o The multi-run fail callback argument now has a curl-error class o Fixed a slowness in curl_echo() due to threading problem in httpuv Changes in version 6.2.0 (2025-01-23) o MacOS: we have temporarily switched to a static build of libcurl 8.11.1 until apple updates their very buggy libcurl (#376) o Fix LTO error for R_multi_setopt o Fix parsing of #fragment links in curl_parse() (#366) Changes in version 6.1.0 (2025-01-06) o Fix a rchk bug o Enable CURLOPT_PIPEWAIT by default to prefer multiplex when possible o Enable setting max_streams in multi_set(), default to 10 o Allow open(curl::curl()) to be interrupted o Interrupting a download no longer causes an error (#365) Changes in version 6.0.1 (2024-11-14) o Fix a build issue with libcurl 8.11.0 o Support multi_fdset() for connection objects (#355) Changes in version 6.0.0 (2024-11-05) o New curl_parse_url() function to expose curl URL parsing interface. o Errors now have classes and more detailed messages o Do not use shared connection pool for FTP requests (works around bug in libcurl < 8.8.0) o Properly clean handle when open() fails for a curl() connection o Parameter 'timeout' renamed to 'multi-timeout' in multi_download() o Default behavior is now to error if a download is stalled for 600 seconds o The MacOS binary packages now require at least libcurl 7.80 which is included with all current MacOS versions (13+) as well as recent patch releases for legacy MacOS versions (11.7 and 12.7). o Windows: update to libcurl 8.10.1 Changes in version 5.2.3 (2024-09-20) o Remove some CMD check verbosity per new CRAN rules o New maintainer email address Changes in version 5.2.2 (2024-08-26) o Disable a compression test for libcurl 8.7.1 which has a bug for deflate o Change a unit test to work around firewall problems on CRANs WinBuilder Changes in version 5.2.1 (2024-03-01) o In handle_setheader(), setting a header to a non-empty whitespace string will now send a blank header. Using an empty string will still remove the header altogether (this has not changed). o Internally simplify handle_setheader() as a wrapper for handle_setopt(httpheader) o Fix an issue where curl_fetch_stream() might not return all bytes received by the C layer if the server closed the connection mid-response. o No longer enable CURLOPT_UNRESTRICTED_AUTH by default o Fix code to build with -DR_NO_REMAP (add all the Rf_ prefixes) Changes in version 5.2.0 (2023-12-08) o The CURL_CA_BUNDLE envvar is now also used on non-Windows. o curl_echo() now uses a random available port to run httpuv o Add workaround for slowness in curl_echo() on Linux o Fix a few printf format warnings Changes in version 5.1.0 (2023-10-02) o Windows: update to libcurl 8.3.0 + nghttp2 2-1.56 + openssl 3.1.2. Changes in version 5.0.2 (2023-08-14) o Fix a unit test for behavioral change in libcurl 8.0.0 o Support seekfunction callback Changes in version 5.0.1 (2023-06-07) o Setting verbose=TRUE now prints to R's stderr instead of the process, such that it works better with some GUIs. o multi_download() now sets mtime for downloaded files from server o form_file() now supports setting an alternate file name (#290) o Fix for multi_download() when downloading 0byte files o Use a self hosted httpbin test server Changes in version 5.0.0 (2023-01-12) o New function multi_download() which supports concurrent downloads and resuming download for large files, while giving detailed progress information. o Windows: updated libcurl to 7.84.0 + nghttp2 o Windows: default to CURLSSLOPT_NATIVE_CA when using openssl unless an ennvar with CURL_CA_BUNDLE is set. o Use the new optiontype API for type checking if available (libcurl 7.73.0) Changes in version 4.3.3 (2022-10-06) o Add support for setting ssl_ctx_function callbacks o Normalize curlopt_postfields to curlopt_copypostfields to transfer ownership of the input data to libcurl. o Fix strict-prototype errors Changes in version 4.3.2 (2021-06-23) o Windows: update binaries to openssl 1.1.1k and libssh2 1.9.0 o Windows: fix build for experimental ucrt toolchains Changes in version 4.3.1 (2021-04-30) o Make tests pass if 'httpuv' is not available (BDR) o Some cleanup for Windows compilers Changes in version 4.3 (2019-12-02) o No longer enable HTTP/2 by default on libcurl < 7.62.0 because some old libcurl versions have annoying HTTP/2 bugs which randomly cause requests to fail. Note that libcurl 7.62 and up always enable HTTP/2 when possible, this doesn't change. o Add paragraph to intro vignette that explain ENUM options, which are a common source of bugs. Specifically explain CURLOPT_HTTP_VERSION. o curl::has_internet() now checks that result of nslookup is actually correct. This should detect offline networks with fake internal DNS. o curl::send_mail() now supports TLS connections, by specifying the smtps:// protocol in the smtp_server argument. The use_ssl argument actually controls whether STARTTLS is enabled; the function documentation has been updated to clarify that, and the default for use_ssl has been changed to "try" (=TRUE). o Fix build for gcc 10 (-fno-common) requested by CRAN. Changes in version 4.2 (2019-09-24) o Fix for old versions of libcurl (build was broken in 4.1 on RHEL / CentOS). o Add hostname to timeout errors (#190) Changes in version 4.1 (2019-09-16) o Fixed typechecking code for new internal macro names in libcurl 7.66 o Rewrite typechecking to work better with clang and old libcurl (#192) o has_internet() now checks for connectivity via a proxy server if one is detected o Windows: respect the CURL_SSL_BACKEND variable for people that want to use OpenSSL. o Windows: respect CURL_CA_BUNDLE if (and only if) CURL_SSL_BACKEND == openssl o curl_download now writes to a temporary file, which is renamed to the destfile upon success. This prevents corrupt files when a download fails or is interrupted. o Automatically set forbid_reuse = TRUE in curl_echo() handles o Update symbol table to 7.66.0 Changes in version 4.0 (2019-07-22) o Stricter type checking for handle options based on macros o curl_symbols is now a function instead of a static table to allow easy filtering o curl_fetch_memory now over-allocates also on unix to avoid many realloc calls o Re-enable cookie unit test which should be fixed in curl 7.64.0 o Fix encoding of paths for downloading and uploading files (@jennybc, #183) o Fix LTO declaration warning for R_get_proxy_for_url o Better support for setting slist (string vector) options such as mail_rcpt o New send_mail() function to send emails with the libcurl smtp client o Add function curl_upload() to upload file to FTP or SCP server o Windows: upgrade to libcurl 7.64.1 o Update symbol data to curl 7.64.1 Changes in version 3.3 (2019-01-10) o The 'data' callback from multi_add() gains a 'final' parameter o The 'data' callback from multi_add() can be given a file path to stream to files o New internal efficient file_writer type used when 'data' callback is a file path o Progress / Xfer callback functions are now explicitly protected (#157) o Tweak some unit tests to give less false positives o curl_echo() has been changed to return better structured output o Added curl_fetch_echo() as a wrapper for curl_echo() o Response for curl_fetch_memory() gains a 'type' field with the content-type o Fix a unit test for OpenSSL 1.1.1 o Better default progress function if no progresfun or xferinfofun is set o Skip unit tests if no internet is available o Fix rchk and valgrind warnings from CRAN o Updated symbol table up with curl 7.64.0 o Use native routine registration and visibility Changes in version 3.2 (2018-03-28) o Windows: Update libcurl to 7.59.0 o Update curl_symbols dataset to 7.59.0 o Fix an IDN unit test (malmö.se has messed up their SSL cert) o Add unit test for multi_fdset o Add backport of trimws for R 3.1 Changes in version 3.1 (2017-12-12) o Fix potential memory bug in curl() when doubling the buffer is insufficient. o Windows: update to libcurl 7.56.1, restore support for libssh2. o Added unit test for curl_echo() to post large multipart data. o Fix IDN unit test error "string has forbidden bi-directional properties" Changes in version 3.0 (2017-10-06) o MAJOR CHANGE ON WINDOWS: On Windows 7 / 2008-R2 and up we switch from OpenSSL to native Windows SSL (secure channel). Therefore curl now uses certificates from the windows certificate manager. This enables users on corporate/government networks to connect through enterprise proxies and such. On Windows Vista/2008 and older (including CRAN) we still use OpenSSL to guarantee TLS 1.1/1.2 support. Other changes: o Windows: updated libcurl to v7.56.0 with dual SSL and native IDN/SSPI o multi_add() and curl_fetch_multi() gain an optional 'data' callback parameter o New function multi_fdset() returns the file descriptors of a multi pool o Add CURLOPT_PROXYAUTH = CURLAUTH_ANY to default handle settings Changes in version 2.8.1 (2017-07-21) o Windows: switch back to OpenSSL instead of SecureChannel because Windows 2008 (CRAN) does not support TLS 1.1 and TLS 1.2 which is required for many servers now. Changes in version 2.8 o Windows: EXPERIMENTAL: on R 3.5+ curl now uses SecureChannel instead of OpenSSL for https. o Windows: updated libcurl to v7.54.1 with native windows IDN. Dropped nghttp2 and rtmp support. o Windows: nslookup() now uses IdnToAscii() for non-ascii domains o Add IDN unit tests on supported platforms o Error messages from libcurl include more detail when available (via CURLOPT_ERRORBUFFER) o Set a default CURLOPT_READFUNCTION because libcurls default can cause R to freeze o Fix a bug for empty forms and/or empty form-fields (+ added unit tests for this) o The 'multi_run()' function gains a parameter 'poll' to return immediately when a request completes. o Disable 'Expect: 100-continue' for POST requests (deprecated in libcurl) o Fix two rchk PROTECT warnings (thanks to Tomas Kalibera) Changes in version 2.7 (2017-06-26) o New function parse_headers_list() to parse response headers into named list o nslookup() gains a parameter 'multi' to return multiple matches o Automatically set 'POSTFIELDSIZE_LARGE' when setting 'POSTFIELDS' or 'COPYPOSTFIELDS' to raw vector o Do not crash when passing invalid objects as handles o Workaround for empty forms, i.e. calling handle_setform() with no arguments Changes in version 2.6 (2017-04-27) o nslookup() gains a parameter ipv4_only = TRUE (fixes unit test on Mavericks) Changes in version 2.5 (2017-04-14) o Add curl_echo() function for easy testing o Add support for curlopt_xferinfofunction, used in curl_echo() o Automatically set curlopt_noprogress = 0 when setting one of the progress functions o Automatically use XFERINFOFUNCTION vs PROGRESSFUNCTION depending on libcurl version o Default User-Agent is now: options("HTTPUserAgent") o Requests will now abort if progress/xferinfo callback raises an error o Open a connection with mode 'f' to skip stop_for_status() during open() Changes in version 2.4 (2017-03-24) o Windows: update libcurl to 7.53.1 with libssl 1.0.2k o New form_data() function to POST form with string/raw values with custom conten-type o Fix busy waiting for curl_fetch_stream() o Tweaks for open(con, blocking = FALSE) o Switch memcpy() to memmove() to please valgrind o Assert that curl() connection is only opened in read mode Changes in version 2.3 (2016-11-24) o All interruptable handles now use a global pool to share connections. Fixes #79. o Enable interruptable interface by default, even in non-interactive mode. o Update libcurl on Windows to 7.51.0 o Unit tests now try serveral httpbin mirrors in case one goes down o Support open(con, blocking = FALSE) and isIncomplete() for curl() connections o Switch curl_fetch_stream to non-blocking implementation Changes in version 2.2 (2016-10-21) o Fixed bug in multi that did not actually enable or disable multiplexing. o Switch unit tests to HTTP/2 server to get HTTP/2 testing coverage o Fix big endian build on GLIBC systems (tnx Aurelien Jarno and Andreas Tille) Changes in version 2.1 (2016-09-22) o If libcurl >= 7.47 and was built --with-nghttp2, automatically enable HTTP/2 on HTTPS connections (matches behavior of 'curl' cmd util) o Upgrade to libcurl 7.50.3 (--with-nghttp2) on Windows (Adds HTTP/2 support) o Fix a unit test that would fail on fast servers Changes in version 2.0 (2016-09-17) o New multi interface for concurrent async requests! o Updated vignette with simple multi examples o Export handle_data() to get handle state Changes in version 1.2 (2016-08-13) o Fix for getaddrinfo GNU extension on some unix platforms Changes in version 1.1 (2016-07-26) o Fix ASAN warning in curl.c (reference after free) Changes in version 1.0 (2016-07-24) o Fix for FreeBSD o Simplify handle refCount system o Better handle locking to prevent using/modifying open handles o Make unit tests always close connection to prevent 'unused connection' warnings o Add support for interruptions in curl_download() Changes in version 0.9.7 (2016-04-10) o The non-blocking download method is now only used in interactive mode o Use options(curl_interrupt = TRUE) to force nonblocking in non-interactive mode o Updated libcurl on windows to 7.47.1. This should fix IPv6 problems. o Update the curl_symbols table to 7.48 Changes in version 0.9.6 (2016-02-17) o Use non-blocking code in curl_fetch_memory to support user interruptions. o Configure script no longer assumes bash so it works on OpenBSD. o Fix for Snow Leopard CRAN build server. o Added has_internet() function. Changes in version 0.9.5 (2016-01-23) o Added nslookup() as cross-platform alternative to nsl() Changes in version 0.9.4 (2015-11-20) o Move the creation of the option table to ./R/options.R o The curl_options() function gains an argument to filter by name o Properly invoke winhttp.def file in Makevars.win (required for new toolchain) Changes in version 0.9.3 (2015-08-25) o Refactor configure script to use pkg-config o Use the preprocessor to extract CURLOPT symbols during install o Don't use setInternet2() in R > 3.2.2 Changes in version 0.9.2 (2015-08-08) o Optimization for windows to make realloc in curl_fetch_memory faster o Updated the curl_symbols table to 7.43 o 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 o New functions for Windows: ie_proxy_info and ie_get_proxy_for_url Changes in version 0.9.1 (2015-07-04) o Convert url argument to utf8 strings in escape/unescape o Endian fix for BSD systems o Add support for setting curlopt_xxx_large options Changes in version 0.9 (2015-06-19) o Fix for very old versions of libcurl (RHEL 5) o Do not convert paths to UTF-8 (only URLs) o Improve error message for unknown options Changes in version 0.8 (2015-06-06) o Fix for curl() character reader to invert byte-order on big endian architectures. Changes in version 0.7 (2015-05-22) o Rename the C function 'fetch' to 'fetchdata' because of Solaris conflict. o Move warning about missing CA bundle on Windows to onAttach. Changes in version 0.6 (2015-05-19) o Validation of SSL certificates is now enabled by default if a bundle is available. o Major rewrite to support configurable and reusable handles o Added new_handle, handle_setopt, handle_setheaders, handle_setform, handle_reset, etc. o Added curl_fetch interfaces for httr o Add ie_proxy_settings to get system proxy configuration on windows Changes in version 0.5 (2015-02-01) o Check for CURLM_CALL_MULTI_PERFORM to support very old versions of libcurl Changes in version 0.4 (2015-01-08) o Fixed a memory bug that could cause R to crash o Add curl_escape, curl_unescape o Add curl_version and curl_options Changes in version 0.3 (2014-12-01) o Add curl_download function o More efficient use of realloc o Fix for older versions of libcurl (e.g. Snow Leopard) o Add support for user interrupts while downloading (ESC or CTRL+C) o Fixed bug that caused GC to corrupt connection object o Refactoring and cleanup Changes in version 0.2 (2014-11-20) o add support for recycling connections Changes in version 0.1 o initial release