isahc
The practical HTTP client that is fun to use.
2.0.1
17M downloads/mo
#2284 most downloaded on crates.io
sagebind/isahc
What this package is like to depend on
Last release 1 months ago
05 Jul 2026
Ships unpredictably
gaps range from 1 weeks to 3.9 years
Nearly every release is documented
notes for 48 of 48 stable releases
Nothing withdrawn
no release was ever pulled
7 years old
49 releases · first in 2019
6 releases in the last 12 months
see the full history below
Release timeline
49 releases · Aug 2019 to Jul 2026Releases
latest 49-
2.0.105 Jul 2026Release notes
Open source →Maintenance
Dependencies
- Bump minimum curl-sys version from 0.4.81 to 0.4.90 (#539)
- This pulls in a bundled libcurl version 8.21.0, which addresses curl/curl#21558 present in 8.20.0. This addresses issue #501.
- Bump log from 0.4.29 to 0.4.30 in (#522)
- Bump rustls-pki-types from 1.14.0 to 1.14.1 in (#523)
- Bump http from 1.4.0 to 1.4.1 in (#524)
- Bump psl from 2.1.210 to 2.1.211 (#526)
- Bump psl from 2.1.211 to 2.1.213 (#535)
- Bump actions/checkout from 6 to 7 (#533)
- Bump log from 0.4.30 to 0.4.32 (#529)
- Bump http from 1.4.1 to 1.4.2 (#530)
- Bump regex from 1.12.3 to 1.12.4 (#531)
- Bump webpki-root-certs from 1.0.7 to 1.0.8 (#536)
- Bump codecov/codecov-action from 6 to 7 (#525)
- Bump actions/cache from 5 to 6 (#532)
Release notes
Open source →Maintenance
Dependencies
- Bump minimum curl-sys version from 0.4.81 to 0.4.90 (#539)
- This pulls in a bundled libcurl version 8.21.0, which addresses https://github.com/curl/curl/issues/21558 present in 8.20.0. This addresses issue #501.
- Bump log from 0.4.29 to 0.4.30 in (#522)
- Bump rustls-pki-types from 1.14.0 to 1.14.1 in (#523)
- Bump http from 1.4.0 to 1.4.1 in (#524)
- Bump psl from 2.1.210 to 2.1.211 (#526)
- Bump psl from 2.1.211 to 2.1.213 (#535)
- Bump actions/checkout from 6 to 7 (#533)
- Bump log from 0.4.30 to 0.4.32 (#529)
- Bump http from 1.4.1 to 1.4.2 (#530)
- Bump regex from 1.12.3 to 1.12.4 (#531)
- Bump webpki-root-certs from 1.0.7 to 1.0.8 (#536)
- Bump codecov/codecov-action from 6 to 7 (#525)
- Bump actions/cache from 5 to 6 (#532)
- Bump minimum curl-sys version from 0.4.81 to 0.4.90 (#539)
-
2.0.025 May 2026Release notes
Open source →Breaking Changes
This release includes a handful of breaking changes, primarily around TLS backends and the TLS API. For more detail on these changes and how to adapt your code when upgrading from 1.x, please see the migration guide.
- Isahc now supports choosing between multiple TLS backends, and crate features have been changed to reflect this. Support for rustls as a TLS backend has been added, and the default TLS backend has been changed to be rustls. (#491)
- Remove and replace all SSL-related options on
Configurablewith a newtlsmodule consolidated intotls::TlsConfig. The names of all individual options have been renamed, and include several small breaking changes. (#491)config::CaCertificaterenamed totls::TrustStore, and expanded with new methods for selecting entire providers of CA certificates, beyond just a single PEM bundle.config::ClientCertificatehas been renamed totls::Identitywith additional options for loading certificates and keys from other formats.config::PrivateKeyhas been moved totls::PrivateKey.config::SslOptionhas been removed and merged into regular builder methods fortls::TlsConfig.
- Redesign
NetworkInterfaceinto multiple types in a newnet::interfacemodule, which has a more natural API and also supports combining multiple criteria for selecting an interface to bind to. (#494) - Several network-related types have been moved from the
configmodule into thenetmodule. (#518)config::Dialerandconfig::DialerParseErrormoved intonet.config::IpVersionmoved tonet::IpVersion.config::DnCacheandconfig::ResolveMapmoved intonet::dns.
- Support for log is now an optional feature, which is enabled by default. (e07e64bd)
Added
- TLS validation can now be augmented by validating a server's certificate is issued by a specific issuer chain using
tls::Issuer. Not all backends support this option. (#491) - Added optional support for using webpki-root-certs as a trust store for root certificates behind a
trust-webpki-rootscrate feature, which can be used with any TLS backend. This can be used automatically by default combined with rustls by enabling therustls-tls-webpki-rootscrate feature. (#492)
Changes
- Add some sanity checks that are performed at runtime when Isahc first initializes to make sure the linked version of libcurl is of a compatible version and seems to be configured to work properly. (#510)
- Internal blob handling has been revamped in order to reduce or even eliminate unnecessary copying of in-memory certificates and keys in TLS configuration. This may result in a small performance improvement and reduction in memory usage when using these options. (#516)
Maintenance
- Revamp and improve GitHub Actions workflows to test Isahc more comprehensively with more platforms, CPU architectures, and feature combinations. (#499) (#500) (#504)
Dependencies
Release notes
Open source →Breaking Changes
This release includes a handful of breaking changes, primarily around TLS backends and the TLS API. For more detail on these changes and how to adapt your code when upgrading from 1.x, please see the migration guide.
- Isahc now supports choosing between multiple TLS backends, and crate features have been changed to reflect this. Support for rustls as a TLS backend has been added, and the default TLS backend has been changed to be rustls. (#491)
- Remove and replace all SSL-related options on
Configurablewith a newtlsmodule consolidated intotls::TlsConfig. The names of all individual options have been renamed, and include several small breaking changes. (#491)config::CaCertificaterenamed totls::TrustStore, and expanded with new methods for selecting entire providers of CA certificates, beyond just a single PEM bundle.config::ClientCertificatehas been renamed totls::Identitywith additional options for loading certificates and keys from other formats.config::PrivateKeyhas been moved totls::PrivateKey.config::SslOptionhas been removed and merged into regular builder methods fortls::TlsConfig.
- Redesign
NetworkInterfaceinto multiple types in a newnet::interfacemodule, which has a more natural API and also supports combining multiple criteria for selecting an interface to bind to. (#494) - Several network-related types have been moved from the
configmodule into thenetmodule. (#518)config::Dialerandconfig::DialerParseErrormoved intonet.config::IpVersionmoved tonet::IpVersion.config::DnCacheandconfig::ResolveMapmoved intonet::dns.
- Support for log is now an optional feature, which is enabled by default. (e07e64bd)
Added
- TLS validation can now be augmented by validating a server's certificate is issued by a specific issuer chain using
tls::Issuer. Not all backends support this option. (#491) - Added optional support for using webpki-root-certs as a trust store for root certificates behind a
trust-webpki-rootscrate feature, which can be used with any TLS backend. This can be used automatically by default combined with rustls by enabling therustls-tls-webpki-rootscrate feature. (#492)
Changes
- Add some sanity checks that are performed at runtime when Isahc first initializes to make sure the linked version of libcurl is of a compatible version and seems to be configured to work properly. (#510)
- Internal blob handling has been revamped in order to reduce or even eliminate unnecessary copying of in-memory certificates and keys in TLS configuration. This may result in a small performance improvement and reduction in memory usage when using these options. (#516)
Maintenance
- Revamp and improve GitHub Actions workflows to test Isahc more comprehensively with more platforms, CPU architectures, and feature combinations. (#499) (#500) (#504)
Dependencies
-
1.8.305 Jul 2026Release notes
Open source →Dependencies
- Remove the restriction on curl-sys dependency versions from the prior release, now that the latest version of curl-sys fixes the DNS hanging issue. Running
cargo updateshould be enough to pull in the latest version of Isahc 1.x and of curl-sys. - The runtime logic of checking for the presence of libcurl version 8.20.0 affected by curl/curl#21558 has been backported from #510 since we no longer prevent that version from being pulled in using dependency ranges. (#541).
Release notes
Open source →Dependencies
- Remove the restriction on curl-sys dependency versions from the prior release, now that the latest version of curl-sys fixes the DNS hanging issue. Running
cargo updateshould be enough to pull in the latest version of Isahc 1.x and of curl-sys. - The runtime logic of checking for the presence of libcurl version 8.20.0 affected by https://github.com/curl/curl/issues/21558 has been backported from #510 since we no longer prevent that version from being pulled in using dependency ranges. (#541).
- Remove the restriction on curl-sys dependency versions from the prior release, now that the latest version of curl-sys fixes the DNS hanging issue. Running
-
1.8.212 May 2026 -
1.8.111 Apr 2026Release notes
Open source →Fixed
- Fix an agent panic in selector that would sometimes be triggered by multiple socket interests communicated from libcurl for the same socket. Error handling for the agent thread has also been improved in general. (#460, #481)
- Fix a segfault that can occur when the agent thread panics and drops a curl multi handle before its easy handles. This is a bug in the curl-rust project, but we have implemented a workaround that should prevent this from happening for any version of curl-rust you might be using. (#459, #461, #480)
- Rewrite PSL cache test to not use globals so that they don't randomly fail in CI. (#485)
- Improve
Debugimpl for empty request bodies to distinguish between an empty body and no body. - Fix docs.rs failing builds.
Dependency Updates
Release notes
Open source →Fixed
- Fix an agent panic in selector that would sometimes be triggered by multiple socket interests communicated from libcurl for the same socket. Error handling for the agent thread has also been improved in general. (#460, #481)
- Fix a segfault that can occur when the agent thread panics and drops a curl multi handle before its easy handles. This is a bug in the curl-rust project, but we have implemented a workaround that should prevent this from happening for any version of curl-rust you might be using. (#459, #461, #480)
- Rewrite PSL cache test to not use globals so that they don't randomly fail in CI. (#485)
- Improve
Debugimpl for empty request bodies to distinguish between an empty body and no body. - Fix docs.rs failing builds.
Dependency Updates
- Remove parking lot dependency.
- Bump psl from 2.1.200 to 2.1.202 (#484, #486)
-
1.8.031 Mar 2026Release notes
Open source →This is the first maintenance release in a few years and includes a few housekeeping items. No major changes or additions.
Changed
- Isahc's MSRV has been increased from 1.46.0 to 1.85.0. (#446)
- The Public Suffix List Git submodule used for compile-time suffix checking has been removed in favor of the
pslcrate which provides the same functionality. (#477) - Releases are now managed by release-plz instead of custom workflows.
Dependency Updates
- Many dependencies have been updated to their latest versions, which should help with compilation in modern environments. Some dependencies now allow for multiple major versions.
once_cellhas been removed in favor of the equivalent types now provided instd. (#478)
Release notes
Open source →This is the first maintenance release in a few years and includes a few housekeeping items. No major changes or additions.
Changed
- Isahc's MSRV has been increased from 1.46.0 to 1.85.0. (#446)
- The Public Suffix List Git submodule used for compile-time suffix checking has been removed in favor of the
pslcrate which provides the same functionality. (#477) - Releases are now managed by release-plz instead of custom workflows.
Dependency Updates
- Many dependencies have been updated to their latest versions, which should help with compilation in modern environments. Some dependencies now allow for multiple major versions.
once_cellhas been removed in favor of the equivalent types now provided instd. (#478)
-
1.7.213 May 2022Release notes
Open source →Security
- Upgrade
curl-systo 0.4.55 to pull in libcurl 7.83.1, which contains security patches for the below vulnerabilities. (#394) @sagebind - Fix several bugs with the
auto_refereroption (disabled by default) which could potentially result in sensitive headers being passed to redirect targets unintentionally. (#393) @sagebind- Fix multiple
Refererheaders being included when two or more redirects are followed in a request - URL fragments and userinfo parts of the URL authority should not be included in the
Refererheader - Don't include a
Refererheader when redirecting from an HTTPS URL to an HTTP URL, as per RFC 7231 recommendation - Scrub sensitive headers when redirecting to a different authority
- Fix multiple
Dependency Updates
- Update Public Suffix List to 172bbfd (#395) @teto-bot
- Upgrade
-
1.7.128 Apr 2022Release notes
Open source →Security
- Update
curl-systo 0.4.54 to pull in libcurl 7.83.0, which contains security patches for CVE-2022-22576, CVE-2022-27774, CVE-2022-27775, and CVE-2022-27776. (#391) @david-perez
- Update
-
1.7.012 Mar 2022Release notes
Open source →Added
- Add new
is_http_version_supportedfunction which allows you to check whether support for a particular HTTP version is available at runtime. When statically linking this will be entirely dependent on your build configuration, but if you are dynamically linking to libcurl then it will vary from system to system. (#368) @sagebind
Changed
- Preallocate buffer for async JSON decoding to improve performance. (#367) @michalmuskala
- Re-enable content-length request test (#383) @sagebind
- Add minimal versions test to CI (#373) @sagebind
- Refactor test server to support writing raw response data. (#366) @sagebind
Dependency Updates
- Update test-case requirement from 1.1 to 2.0 (#376) @dependabot
- Add new
-
1.6.013 Nov 2021Release notes
Open source →Added
- Expose new APIs for cookie construction, updating, and adding to cookie jar. You can now create your own cookies with
Cookie::builderand put arbitrary cookies into the cookie jar withCookieJar::set. (#264, #349) @jacobmischka - Add
bytes()convenience methods toReadResponseExtandAsyncReadResponseExtwhich read the entire response body into aVec<u8>. (#352) @sagebind - Speed up CI by adding caching to CI (#358) @sagebind
Security
- Replace trivial internal usage of chrono with httpdate to avoid any potential reference to CVE-2020-26235 in
time0.2. (#361) @sagebind
Dependency Updates
- Replace chrono with httpdate internally (#361) @sagebind
- Update tracing-subscriber requirement from 0.2.12 to 0.3.0 (#360) @dependabot
- Update Tarpaulin and re-enable doctest coverage (#357) @sagebind
- Update tiny_http requirement from 0.8 to 0.9 (#356) @dependabot
- Expose new APIs for cookie construction, updating, and adding to cookie jar. You can now create your own cookies with
-
1.5.113 Oct 2021Release notes
Open source →Fixed
- Greatly reduce CPU usage, particularly when receiving long-running or large responses. This was caused by a bug where timeout timers were not being cleared once they expired, effectively creating a repeating timer that would cause repeated extra polls. Huge thanks to @jacobmischka for finding and fixing this bug! (#348, #350)
- Return true for
Body::is_emptyforHEADresponses (#341, #343) - Fix code coverage analysis failing to run in CI. (#351)
-
1.5.023 Aug 2021Release notes
Open source →Added
- Expose connection info in errors with the addition of
Error::local_addrandError::remote_addr. This allows you to get the local & remote addresses involved in a request, if any, even if an error occurs. (#336, #337) @sagebind - Allow use of the
Expectheader to be configured viaConfigurable::expect_continue. (#303, #311, #340) @sagebind
Dependency Updates
- Update env_logger requirement from 0.8 to 0.9 (#330) @dependabot
- Expose connection info in errors with the addition of
-
1.4.118 Aug 2021Release notes
Open source →Added
- Improve the documentation on
ErrorandErrorKindand addError::is_timeout.
Fixed
- Improve connection reuse log message and fix some false positives around its emission. The warning about connection reuse will now point users to the wiki page which explains the message in depth. (#335) @sagebind
Dependency Updates
- Update Public Suffix List to bc5d64d (#328) @teto-bot
- Improve the documentation on
-
1.4.014 May 2021Release notes
Open source →Added
- Add support for using in-memory client certificates. (#89, #320)
- Add API for accessing trailer headers in responses. (#157, #256)
Changed
- Isahc's MSRV has been increased from 1.41.0 to 1.46.0. (#321)
Fixed
- Fix wrong link to request type in docs. (#323) @humb1t
Dependency Updates
- Update Public Suffix List to 598c638 (#325) @teto-bot
-
1.3.117 Apr 2021Release notes
Open source →Dependency Updates
- Update Public Suffix List to 5cb7ed8 (#319) @teto-bot
- Update curl version constraint to ensure MSRV.
-
1.3.007 Apr 2021Release notes
Open source →Added
- Allow configuring low speed timeouts for transfers, either per-request or as a client default. (#316) @MoSal
Fixed
- Handle raw UTF-8 bytes in redirect headers (#315, #317) @sagebind
- Fix agent IDs for tracing always
0. @sagebind
Changed
- Replace flume with async-channel internally to maintain MSRV contract. (#318) @sagebind
-
1.2.023 Mar 2021Release notes
Open source →This release contains some minor performance improvements as a result of some internal changes.
Changed
- Switch agent from curl-provided
select(2)backend topolling. This delivers some throughput improvements in some benchmarks involving concurrent requests. This also removes Isahc's reliance on loopback UDP sockets for selector wakeups. (#17, #243, #263) @sagebind - Refactor request configuration internal representation. This offered a minor performance improvement in some cases by greatly reducing the amount of hashmap lookups needed for applying request configuration. (#292) @sagebind
Dependency Updates
- Upgrade publicsuffix to v2 (#312) @rushmorem
- Update tiny_http requirement from 0.7 to 0.8 (#296) @dependabot
- Switch agent from curl-provided
-
1.1.030 Jan 2021Release notes
Open source →Added
- Add async
json()response convenience method to deserialize JSON asynchronous responses to mirror the synchronous one. (#245, #291) - Add consume API for reading response bodies fully before discarding them. (#257, #284)
Fixed
- Update sluice to pull in race condition bugfix. (#295)
- Add async
-
1.0.311 Jan 2021Release notes
Open source →Fixed
- Fix parsing of quoted cookie values (#288) @theawless
Dependency Updates
- Update Public Suffix List to 6b67c6f (#289) @teto-bot
-
1.0.201 Jan 2021Release notes
Open source →Fixed
- Headers for HTTP/1.x are now always sent with a single trailing space after the colon (
:). While not strictly necessary according to RFC 7230, it was uncommon formatting and poorly-written servers can choke on parsing such headers. (#286, #287)
- Headers for HTTP/1.x are now always sent with a single trailing space after the colon (
-
1.0.131 Dec 2020Release notes
Open source →Fixed
- Update future type returned by
AsyncReadResponseExt::copy_toto implementSendif both the reader and writer types implementSend. This allows it to work with multithreaded runtimes. (#283, #285)
- Update future type returned by
-
1.0.029 Dec 2020Release notes
Open source →Breaking Changes
- The
Bodytype has now been broken up into distinctAsyncBodyandBodytypes, with the former implementing onlyAsyncReadand the latter implementing onlyRead. This was done to reduce confusion on how to produce and consume body content when in an asynchronous context without blocking. This also makes it possible to use synchronousReadsources such as aFileas a request body when using the synchronous API, something that was previously difficult to do. (#202, #262) - Methods on the
ResponseExttrait related to reading the response body have been extracted into two new extension traits:AsyncReadResponseExtandReadResponseExt. Like the previous change, this was done to reduce confusion on which methods to use when consuming a response in an async context. The_asyncsuffix previously used to distinguish between the sync and async methods has been dropped, as it is no longer necessary. (#202, #262) - The
Errortype has been significantly refactored and changed into a struct with a separateErrorKindenum. This was done to make it possible to add new errors without breaking changes, and to ensure that errors can always preserve upstream causes efficiently. The error kinds have also been updated to be clearer and more distinct. (#182, #258) - The
bytescrate is no longer a dependency andBody::from_maybe_sharedhas been removed. (#261) Configurable::dns_servershas been removed, as it is more likely to confuse users more than anything since it requires libcurl to be compiled with c-ares, which it isn't by default and is unlikely to be.- Removed
Request,Response, andHttpClientfrom thepreludemodule. You will now have to import these directly. Importing large prelude modules can make code more confusing to read and is usually considered an anti-pattern. (#281)
Fixed
- Fix warning for aborting response body stream early being emitted inconsistently. Also change from a
WARNto anINFOlog. (#280)
Other Changes
- The minimum supported Rust version (MSRV) is now pinned to 1.41. (#259)
- Add
post_asyncexample usage and improve various method docs. (#273) - Add rustfmt config and apply rustfmt to the entire codebase. (#276, #277)
- Add Clippy checks to CI. (#279)
Dependency Updates
- Update Public Suffix List to f9f612a (#266)
- Update flume requirement from 0.9 to 0.10 (#271)
- The
-
1.0.0-beta.109 Dec 2020 pre-releaseRelease notes
Open source →Breaking Changes
- The
Bodytype has now been broken up into distinctAsyncBodyandBodytypes, with the former implementing onlyAsyncReadand the latter implementing onlyRead. This was done to reduce confusion on how to produce and consume body content when in an asynchronous context without blocking. This also makes it possible to use synchronousReadsources such as aFileas a request body when using the synchronous API, something that was previously difficult to do. (#202, #262) - Methods on the
ResponseExttrait related to reading the response body have been extracted into two new extension traits:AsyncReadResponseExtandReadResponseExt. Like the previous change, this was done to reduce confusion on which methods to use when consuming a response in an async context. The_asyncsuffix previously used to distinguish between the sync and async methods has been dropped, as it is no longer necessary. (#202, #262) - The
Errortype has been significantly refactored and changed into a struct with a separateErrorKindenum. This was done to make it possible to add new errors without breaking changes, and to ensure that errors can always preserve upstream causes efficiently. The error kinds have also been updated to be clearer and more distinct. (#182, #258) - The
bytescrate is no longer a dependency andBody::from_maybe_sharedhas been removed. (#261) Configurable::dns_servershas been removed, as it is more likely to confuse users more than anything since it requires libcurl to be compiled with c-ares, which it isn't by default and is unlikely to be.
Other Changes
- The minimum supported Rust version (MSRV) is now pinned to 1.41. (#259)
Dependency Updates
- Update Public Suffix List to f9f612a (#266) @sagebind
- The
-
0.9.1409 Dec 2020Release notes
Open source →Fixed
- Fix body length incorrectly returning the length of the compressed body when the server combines compression and
Content-Lengthwith auto decompression enabled. (#265, #267)
- Fix body length incorrectly returning the length of the compressed body when the server combines compression and
-
0.9.1314 Nov 2020Release notes
Open source →Added
- Add
Configurable::ip_versionwhich allows you to restrict resolving hostnames to a specific IP version. (#252, #253) @ArenM
Fixed
- Fix redirect handling with redirect responses that include non-empty bodies, another regression introduced in 0.9.11. (#250, #255) @sagebind
Changed
- Trim some heavy dependencies. (#254) @sagebind
- Add
-
0.9.1211 Nov 2020Release notes
Open source →Fixed
- Fix a regression introduced in 0.9.11 resulting in client-wide redirect policies not being respected. (#250, #251) @sagebind
Changed
- Improve documentation on timeouts. (#249) @sagebind
Dependency Updates
- Update Public Suffix List to 6400969 (#248) @sagebind
-
0.9.1103 Nov 2020Release notes
Open source →A surprisingly feature-focused patch release with a couple notable bugfixes. This October Isahc opted-in to Hacktoberfest, and we received a couple additions from new contributors. Thanks!
Added
- Add
HttpClientBuilder::connection_cache_ttlfor configuring how long to keep connections open in the cache. (#93, #237) @gsquire - Make cookie jar API more useful by adding several new methods, including
HttpClient::cookie_jar,Configurable::cookie_jar,CookieJar::get_by_name,Cookie::value, and more! An example of how to use some of these have been added toexamples/cookies.rs. (#215, #233) @sagebind - Add a "Why not use" section to readme. (#234) @sagebind
Fixed
- Fix timeouts and other mid-transfer errors causing unexplained EOFs instead of returning a proper
io::Error. (#154, #246) @sagebind - Fix improper cookie behavior when automatically following redirects, such as not sending any cookies in subsequent requests. (#232, #240) @sagebind
Changed
- Make
HttpClientcloneable. This makes it much more convenient to share a client instance between threads or tasks. (#241, #244) @braunse - Replace middleware API with interceptors API. The
middleware-previewcrate feature has been removed and theunstable-interceptorsfeature has been added. The API is still unstable, but addresses a number of problems with the old proposed middleware API. (#42, #206) @sagebind - Update integration tests to use new testserver (#230) @sagebind
Dependency Updates
- Update env_logger requirement from 0.7 to 0.8 (#238) @dependabot
- Update crossbeam-channel requirement from 0.4 to 0.5 (#236) @dependabot
- Update crossbeam-utils requirement from 0.7 to 0.8 (#235) @dependabot
- Update Public Suffix List to 40d5bd4 (#231) @sagebind
- Create Dependabot config file (#229) @dependabot-preview
- Add
-
0.9.1001 Oct 2020Release notes
Open source →Added
- Add
automatic_decompressionoption to allow you to disable the automatic response body decompression or enable it on a per-request basis. (#227, #228)
- Add
-
0.9.923 Sep 2020Release notes
Open source →Added
- Add static-ssl feature to mirror curl/static-ssl (#225) @SecurityInsanity
Dependency Updates
- Update Public Suffix List to 5b2327d (#224) @sagebind
-
0.9.808 Aug 2020Release notes
Open source →Added
- Add title_case_headers option (#205, #218) @sagebind
- Add local_addr and remote_addr getters (#220, #221) @sagebind
Dependency Updates
- Update Public Suffix List to 54eae6e (#222) @sagebind
-
0.9.729 Jul 2020Release notes
Open source →Added
- Add new
config::DialerAPI that allows you to customize and override what sockets are connected to for a request, regardless of the host in the URL. Static IP sockets and Unix sockets are initially supported. (#150, #207) @sagebind
Fixed
- Fix HEAD requests with a body and libcurl 7.71+ not playing well together because of incorrect usage of
CURLOPT_NOBODYin Isahc. (#213, #214, #216) @sagebind
Dependency Updates
- Update mockito requirement from 0.26 to 0.27 (#217) @dependabot-preview
- Add new
-
0.9.621 Jul 2020Release notes
Open source →Fixed
- Fix empty and blank request header values not being sent. (#209, #210)
Dependency Updates
- Update Public Suffix List to 011f110 (#204)
- Update mockito requirement from 0.25 to 0.26 (#203) @dependabot-preview
- Update parking_lot requirement from 0.10 to 0.11 (#201) @dependabot-preview
-
0.9.524 Jun 2020Release notes
Open source →Fixed
- Upgrade curl to 0.4.30 to mitigate potential init-on-non-main-thread with certain TLS engines on certain platforms. (#189) @sagebind
Added
- Allow for experimental HTTP/3 support in libcurl. (This does not enable HTTP/3 support, it just merely allows it if libcurl is compiled with it.) (#185) @sagebind
Dependency Updates
- Update indicatif requirement from 0.14 to 0.15 (#200) @dependabot-preview
-
0.9.411 Jun 2020Release notes
Open source →Fixed
- Invalid read:
Multi::closecalled twice (#198) @DBLouis - Change all tracing spans to
Tracelevel to reduce log noise (#195) @sagebind
Changed
- Update analysis CI job (#197) @sagebind
- Expand first readme example to full program (#194) @sagebind
Dependency Updates
- Update Public Suffix List to fe4225d (#196) @sagebind
- Invalid read:
-
0.9.324 May 2020Release notes
Open source →Fixed
- Fix built-in user agent overriding client default headers. (#191) @sagebind
- Fix incorrectly named function parameter. (#188) @DBLouis
Changed
-
0.9.210 May 2020Release notes
Open source →Added
- Add the ability to set default outgoing header values to include on all requests when building a custom client. Headers set on a request always take precedence over defaults. (#180, #181, #186) @ansrivas
Fixed
- Fix code test coverage analysis no longer working. (#183, #187) @sagebind
Dependency Updates
- Update Public Suffix List to c1d5b3c (#184) @sagebind
- Update Public Suffix List to 17ca522 (#177) @sagebind
- Update mockito requirement from 0.23 to 0.25 (#178) @dependabot-preview
-
0.9.111 Mar 2020Release notes
Open source →Changed
- Implement
Sendfor the opaqueFuturetype returned byResponseExt::text_asyncwhenever the response body also implementsSend. (#173, #175)
Dependency Updates
- Update Public Suffix List to 9afbb37 (#174)
- Implement
-
0.9.005 Mar 2020Release notes
Open source →Welcome to a new decade!
This release includes a number of API improvements and features, as well as a couple bug fixes. The API changes improve ease of use and ergonomics, incorporating the new 0.2 version of the
httpcrate, as well as reduces the number of confusing types to help make finding what you are looking for easier in the documentation.Breaking Changes
- Request configuration is now done via the
Configurabletrait, which unifies the old methods fromHttpClientBuilderandRequestBuilderExtinto one place. The old methods have been removed, but most programs should compile without changes if the prelude is imported. (#48, #135) - Multiple breaking API improvements to
Body(#143):Body::readerandBody::reader_sizedhave been renamed toBody::from_readerandBody::from_reader_sized, respectively.Body::byteshas been replaced withBody::from_maybe_shared, which uses type downcasting to accept aBytesif given without having thebytescrate being part of the public API.Bodyno longer implementsFrom<Bytes>for the reason above.Body::text,Body::text_async, andBody::jsonhave all been removed in favor of the equivalent methods provided byResponseExt. This was done because the body alone is often not enough information to decode responses in a correct manner. (#142)
- Various improvements to request config bounds that accept more argument types.
- The
cookiesfeature is no longer enabled by default. (#141) - Creating a
Bodyfrom anAsyncReadmust now beSyncso thatBodyimplementsSync. (#172) - Response text decoding methods are now behind the
text-decodingfeature, enabled by default. (#156)
Added
- Handle more than just UTF-8 when decoding a response into text. (#90, #156)
- Add ability to bind to specific network interface. (#151, #155)
- Add ability to pre-populate DNS lookups with predefined mappings. (#114)
- Add Isahc logo to documentation. (#138) @jmjoy
Fixed
Body::is_emptyshould not return true for a zero-length body that is present (as opposed to no body). (#144)- Upgrade curl-sys to fix static linking issues with older versions of macOS (#68, #169)
- Fix doctests and run cargo fmt (#160) @ggriffiniii
Changed
- Improve proxy handling test coverage (#167)
- Make default
VersionNegotiationmore conservative (#159, #164) - Set up code coverage analysis via grcov (#165)
Dependency Updates
- Upgrade http from 0.1 to 0.2 (#135)
- Update Public Suffix List to 11f4542 (#166)
- Update indicatif requirement from 0.13 to 0.14 (#162) @dependabot-preview
- Update mockito requirement from 0.22 to 0.23 (#163) @dependabot-preview
- Update Public Suffix List to d73f42f (#149)
- Update bytes requirement from 0.4 to 0.5 (#132) @dependabot-preview
- Update Public Suffix List to a406942 (#137)
- Request configuration is now done via the
-
0.8.206 Dec 2019Release notes
Open source →Changed
- Don't ask for default features in
futures-utilbecause we do not use them. (#134) @jakobhellermann - Update parking_lot requirement from 0.9 to 0.10 (#133) @dependabot-preview
- Don't ask for default features in
-
0.8.126 Nov 2019Release notes
Open source →Fixed
- Only request upgrade to HTTP/2 if it is actually available. (#131) @sagebind
-
0.8.023 Nov 2019Release notes
Open source →This release includes an upgrade to the much awaited futures 0.3, as well as some great new features and a few small breaking improvements to the API.
Breaking Changes
- Upgrade from futures-preview to futures 0.3. Largely the same as futures-preview, but a breaking change due to the crate switch. (#116) @sagebind
- The
preferred_http_version()method has been removed in favor of a newVersionNegotiationAPI with more robust configuration, including support for HTTP/2 Prior Knowledge. Generally this will be a mechanical migration frompreferred_http_version()toversion_negotiation(). If you were previously passing inVersion::HTTP_2in order to enable HTTP/2 on insecure requests, you can now remove this as Isahc will include anUpgradeheader and switch to HTTP/2 automatically by default. (#129) @sagebind - A couple various boolean SSL options have been replaced with an
ssl_options()method that permits you to set multiple flags with greater granularity and control. (#128) @sagebind
Added
- Added options for setting a CA certificate, disabling certificate revocation checks, and disabling proxies globally or for specific hosts. (#124) @ohadravid
- Document json feature in examples. (#121) @gbip
- Add a new API for HTTP auth. This includes a new crate feature
spnegowhich allows you to configure HTTP Negotiate. Basic and digest auth are also supported. (#115) @sagebind
Changed
- Update mockito requirement from 0.21 to 0.22 (#123) @dependabot-preview
- Update crossbeam-utils requirement from 0.6 to 0.7 (#117) @dependabot-preview
- Update indicatif requirement from 0.12 to 0.13 (#119) @dependabot-preview
- Update crossbeam-channel requirement from 0.3 to 0.4 (#120) @dependabot-preview
-
0.7.608 Nov 2019Release notes
Open source →Added
- Add a new metrics API for inspecting various request timing information. (#47, #88) @sagebind
Changed
- Update Public Suffix List to b566870 (#112) @sagebind
-
0.7.504 Nov 2019Release notes
Open source →This release adds several new options for configuring connection behavior on an
HttpClient, as well as a couple important bug fixes.Added
- Add options for configuring the connection cache (#95)
- Add option to configure DNS caching per client (#96)
- Add connection limit options for clients (#92)
Fixed
- Fix agent shutdown caused by unpause errors (#97, #101)
- Keep all instances of the same response header (#100, #107) @alexcormier
- Fix auto referer not setting referer header (#91)
Changed
- Add better error messaging and logging around agent disconnect (#99)
- Update mockito requirement from 0.20 to 0.21 (#85)
-
0.7.425 Sep 2019Release notes
Open source →Fixed
- Fix parsing headers with a colon in their value. Previously headers like
Location: https://example.orgwere being truncated toLocation: https. (#82) @puckipedia
Changed
- Update env_logger requirement from 0.6 to 0.7. (#80)
- Fix parsing headers with a colon in their value. Previously headers like
-
0.7.306 Sep 2019Release notes
Open source →Added
- Add
ResponseExt::effective_urifor retrieving the last visited URI during a single request-response cycle. (#74)
Fixed
- Fix panic due to broken implementation in cookie jar middleware. (#70)
- Add
-
0.7.205 Sep 2019Release notes
Open source →Added
- Add the ability to ignore SSL validation. (#71) @jlricon
Fixed
- Pull in read-after-EOF bugfix in Sluice. (#72, #73)
Changed
- Update criterion requirement from 0.2 to 0.3 (#67) @dependabot-preview
-
0.7.123 Aug 2019Release notes
Open source →Changed
- Upgrade futures-preview dependencies to the latest and greatest of 0.3.0-alpha.18.
HttpClient::new()will now block fully until the client is actually initialized. Previously it would block on some things being initialized, and then return once the agent thread has started. This proved to be a bit too unusual, and had a tendency to cause extra delays for the first few requests being sent. This new behavior should feel much more predictable.
Fixed
- Benchmarking sub-crate once again compiles and runs.
-
0.7.020 Aug 2019Release notes
Open source →Breaking Changes
HttpClient::new()now returns aResult<HttpClient, Error>since creating a client is fallible. Previously this method would panic if instantiation failed, which was not a very API.- The
Defaultimplementation forHttpClienthas been removed, since instantiating it is fallible.
Fixed
- Dropping an
HttpClientpreviously would cause any active transfers created by the client to return EOF after emptying the response body buffer. Now the curl multi handle will be kept alive until all transfers are completed or cancelled. In addition, reading from the response body will return aConnectionAbortederror if for some reason the transfer was stopped without finishing. (#65)
Changed
- Use the latest GitHub Actions beta features for CI. (#56)
-
0.6.003 Aug 2019Release notes
Open source →Changed
- The project has been renamed from cHTTP to Isahc! This also includes an adorable new project mascot... (#36, #54)
- The length property for
Bodyhas changed from anusizeto anu64.usizeis too small to fit large file sizes on machines that have less than 64 bit pointer size. (#52) - The
Error::Internalvariant has been removed, as a panic is more suitable for the one situation that previously returned this error. - The
Error::TooManyConnectionsvariant has been removed, as it is an artifact from old cHTTP versions. Isahc has no artificial limit on the number of connections that can be used simultaneously outside of system limits.