455 lines
16 KiB
Markdown
455 lines
16 KiB
Markdown
## v0.9.15
|
||
|
||
- Fix sending of "appended" request headers.
|
||
|
||
## v0.9.14
|
||
|
||
- Add optional support for SOCKS5 proxies, by enabling the `socks5` cargo feature.
|
||
- Add Cookie Store support to `Client`, automatically handling cookies for a session.
|
||
* Add `ClientBuilder::cookie_store(enable: bool)` method to enable a cookie store that persists across requests.
|
||
* Add `Response::cookies()` accessor that allows iterating over response cookies.
|
||
- Fix `Proxy` to check the URL for a username and password.
|
||
|
||
## v0.9.13
|
||
|
||
### Fixes
|
||
|
||
- Fix panic on some invalid `Location` headers during redirects (error is logged and redirect response is returned instead).
|
||
- Fix instance when server notices streaming request body is complete before reqwest does.
|
||
|
||
## v0.9.12
|
||
|
||
### Features
|
||
|
||
- Add `ClientBuilder::tcp_nodelay()` to allow disabling Nagle's algorithm.
|
||
- Add `ClientBuilder::max_idle_per_host()` to allow reducing the number of idle pooled connections.
|
||
- Add `RequestBuilder::bearer_auth()` method to async builder.
|
||
|
||
### Fixes
|
||
|
||
- Fix capitalization error in async `RequestBuilder::basic_auth()`.
|
||
- Fix ALPN causing issues when using a Proxy.
|
||
|
||
## v0.9.11
|
||
|
||
### Features
|
||
|
||
- Add `multipart::Form::percent_encode_noop()` to allow for servers which don't support percent encoding of paramters.
|
||
- Add `ClientBuilder::http1_title_case_headers()` to force request headers to use Title-Case.
|
||
- Add `ClientBuilder::connect_timeout()` to allow setting only a connect timeout.
|
||
|
||
## v0.9.10
|
||
|
||
### Features
|
||
|
||
- Add `ClientBuilder::local_address()` to bind to a local IP address.
|
||
- Add `Response::error_for_status_ref()` to return an `Error` while borrowing a `Response`.
|
||
|
||
### Fixes
|
||
|
||
- Fix `Identity::from_pem` with `rustls-tls` backend when using RSA private keys.
|
||
|
||
## v0.9.9
|
||
|
||
### Features
|
||
|
||
- Add `ClientBuilder::h2_prior_knowledge()` option to force HTTP2.
|
||
- Add `Response::content_length()` to get the content-length of a response.
|
||
- Enable ALPN h2 with the rustls-tls backend.
|
||
|
||
## v0.9.8
|
||
|
||
### Fixes
|
||
|
||
- Revert default DNS resolver to `getaddrinfo` in a threadpool. There is now a `trust-dns` optional feature to enable the Trust-DNS resolver.
|
||
- Detect `Certificate` and `Identity` errors at construction time.
|
||
|
||
## v0.9.7
|
||
|
||
### Fixes
|
||
|
||
- Fix DNS resolver on Android (reverted back to `getaddrinfo`).
|
||
- Fix sending unicode `filename`s in `multipart/form-data` requests.
|
||
|
||
## v0.9.6
|
||
|
||
### Features
|
||
|
||
- Add `Proxy::basic_auth` method to support proxy authorization.
|
||
- Add `rustls-tls` optional feature to use rustls instead of native-tls.
|
||
- Add `try_clone` method to `Request` and `RequestBuilder`.
|
||
- Add `reqwest::async::multipart` support, similar to the synchronous API.
|
||
- Adds `default-tls-vendored` optional feature to vendor OpenSSL.
|
||
|
||
### Fixes
|
||
|
||
- Fix panic from top-level `reqwest::get` if client builder fails to build.
|
||
- Removed timeout waiting for `reqwest::Client` runtime to startup.
|
||
- Fix `RequestBuilder::headers` to properly append extra headers of the same name.
|
||
|
||
|
||
### Performance
|
||
|
||
- Replaced DNS threadpool using `getaddrinfo` with a non-blocking DNS resolver.
|
||
|
||
## v0.9.5
|
||
|
||
### Features
|
||
|
||
- Adds `Response::remote_addr()` method to check the address of the connection used.
|
||
- Adds `default-tls` crate feature, enabled by default, which allows users to *disable* TLS.
|
||
|
||
## v0.9.4
|
||
|
||
### Features
|
||
|
||
- Adds `percent_encoding_path_segment` and `percent_encoding_attr_char` configuration to `multipart::Form`.
|
||
|
||
### Fixes
|
||
|
||
- Reverts `multipart::Form` default percent encoding format to `path-segment`.
|
||
|
||
## v0.9.3
|
||
|
||
### Features
|
||
|
||
- Adds `multipart::Part::bytes()` to create a part of raw bytes.
|
||
- Adds constructors for `Response` to help with testing.
|
||
|
||
### Fixes
|
||
|
||
- Properly percent-encoding more illegal characters in multipart filenames.
|
||
- Ensure timed out requests cancel the associated async task.
|
||
|
||
## v0.9.2
|
||
|
||
### Fixes
|
||
|
||
- Fix panic when `Location` header has UTF-8 characters.
|
||
|
||
## v0.9.1
|
||
|
||
### Fixes
|
||
|
||
- Fix large request bodies failing because of improper handling of backpressure.
|
||
- Remove body-related headers when redirect changes a `POST` into a `GET`.
|
||
- Reduce memory size of `Response` and `Error` signicantly.
|
||
|
||
# v0.9.0
|
||
|
||
### Features
|
||
|
||
- Upgrade to `tokio` 0.1.
|
||
- Upgrade to `hyper` 0.12.
|
||
- Upgrade to `native-tls` 0.2.
|
||
- Add `ClientBuilder::danger_accept_invalid_certs(bool)` to disable
|
||
certificate verification.
|
||
- Add `RequestBuilder::bearer_auth(token)` to ease sending bearer tokens.
|
||
- Add `headers()` and `headers_mut()` to `multipart::Part` to allow sending
|
||
extra headers for a specific part.
|
||
- Moved `request::unstable::async` to `reqwest::async`.
|
||
|
||
### Fixes
|
||
|
||
- Fix panicking when passing a `Url` with a `file://` scheme. Instead, an
|
||
`Error` is returned.
|
||
|
||
### Breaking Changes
|
||
|
||
- Changed `ClientBuilder::danger_disable_hostname_verification()`
|
||
to `ClientBuilder::danger_accept_invalid_hostnames(bool)`.
|
||
- Changed `ClientBuilder` to be a by-value builder instead of by-ref.
|
||
|
||
For single chains of method calls, this shouldn't affect you. For code that
|
||
conditionally uses the builder, this kind of change is needed:
|
||
|
||
```rust
|
||
// Old
|
||
let mut builder = ClientBuilder::new();
|
||
if some_val {
|
||
builder.gzip(false);
|
||
}
|
||
let client = builder.build()?;
|
||
|
||
// New
|
||
let mut builder = ClientBuilder::new();
|
||
if some_val {
|
||
builder = builder.gzip(false);
|
||
}
|
||
let client = builder.build()?;
|
||
```
|
||
- Changed `RequestBuilder` to be a by-value builder of by-ref.
|
||
|
||
See the previous note about `ClientBuilder` for affected code and
|
||
how to change it.
|
||
- Removed the `unstable` cargo-feature, and moved `reqwest::unstable::async`
|
||
to `reqwest::async`.
|
||
- Changed `multipart::Part::mime()` to `mime_str()`.
|
||
|
||
```rust
|
||
// Old
|
||
let part = multipart::Part::file(path)?
|
||
.mime(mime::TEXT_PLAIN);
|
||
|
||
// New
|
||
let part = multipart::Part::file(path)?
|
||
.mime_str("text/plain")?;
|
||
```
|
||
- The upgrade to `hyper` 0.12 means a temporary removal of the typed headers.
|
||
|
||
The `RequestBuilder` has simple methods to set headers using strings, which
|
||
can work in most places.
|
||
|
||
```rust
|
||
// Old
|
||
client
|
||
.get("https://hyper.rs")
|
||
.header(UserAgent::new("hallo"))
|
||
.send()?;
|
||
|
||
// New
|
||
client
|
||
.get("https://hyper.rs")
|
||
.header("user-agent", "hallo")
|
||
.send()?;
|
||
```
|
||
|
||
To ease the transition, there is a `hyper-011` cargo-feature that can be
|
||
enabled.
|
||
|
||
```toml
|
||
[dependencies]
|
||
reqwest = { version = "0.9", features = ["hyper-011"] }
|
||
```
|
||
|
||
And then usage:
|
||
|
||
```rust
|
||
client
|
||
.get("https://hyper.rs")
|
||
.header_011(reqwest::hyper_011::header::UserAgent::new("hallo"))
|
||
.send()?;
|
||
```
|
||
|
||
|
||
## v0.8.8
|
||
|
||
- Fix docs.rs/reqwest build.
|
||
|
||
## v0.8.7
|
||
|
||
### Fixes
|
||
|
||
- Send an extra CRLF at the end of multipart requests, since some servers expect it.
|
||
- Removed internal dependency on `tokio-proto`, which removed unsafe `small-vec`
|
||
dependency.
|
||
|
||
## v0.8.6
|
||
|
||
### Features
|
||
|
||
- Add `RedirectAttempt::status` to check status code that triggered redirect.
|
||
- Add `RedirectPolicy::redirect` method publicly, to allow composing policies.
|
||
|
||
## v0.8.5
|
||
|
||
### Features
|
||
|
||
- Try to auto-detect encoding in `Response::text()`.
|
||
- Add `Certificate::from_pem` to load PEM encoded client certificates.
|
||
- Allow unsized types in `query`, `form`, and `json`.
|
||
- Add `unstable::async::RequestBuilder::query`, mirroring the stable builder method.
|
||
|
||
## v0.8.4
|
||
|
||
### Features
|
||
|
||
- Add `RequestBuilder::query` to easily adjust query parameters of requests.
|
||
|
||
## v0.8.3
|
||
|
||
### Features
|
||
|
||
- Upgrades internal log crate usage to v0.4
|
||
|
||
## v0.8.2
|
||
|
||
### Fixes
|
||
|
||
- Enable hyper's `no_proto` config, fixing several bugs in hyper.
|
||
|
||
## v0.8.1
|
||
|
||
### Features
|
||
|
||
- Add `ClientBuilder::default_headers` to set headers used for every request.
|
||
- Add `async::ClientBuilder::dns_threads` to set number of threads use for DNS.
|
||
- Add `Response::text` as shortcut to read the full body into a `String`.
|
||
- Add `Response::copy_to` as shortcut for `std::io::copy`.
|
||
|
||
# v0.8.0
|
||
|
||
### Features
|
||
|
||
- Client TLS Certificates (#43)
|
||
- GZIP decoding has been added to the **async** Client (#161)
|
||
- `ClientBuilder` and `RequestBuilder` hold their errors till consumed (#189)
|
||
- `async::Response::body()` now returns a reference to the body instead of consuming the `Response`
|
||
- A default timeout for `reqwest::Client` is used set to 30 seconds (#181)
|
||
|
||
### Breaking Changes
|
||
|
||
- `Client::new` no longer returns a `Result`.
|
||
|
||
To handle any panics that come from `Client::new`, the builder can be used instead.
|
||
- `ClientBuilder` and `RequestBuilder` hold their errors till consumed (#189).
|
||
|
||
This means a bunch of `?` will be going away, but means using the builders will be far easier now. Any error encountered inside the builders will now be returned when the builder is consumed.
|
||
|
||
To get errors back immediately, the `Request` type can be used directly, by building pieces separately and calling setters.
|
||
- `async::Response::body()` now returns a reference to the body instead of consuming the `Response`.
|
||
- A default timeout for `reqwest::Client` is used set to 30 seconds (#181)
|
||
|
||
For uses where the timeout is too short, it can be changed on the `ClientBuilder`, using the `timeout` method. Passing `None` will disable the timeout, reverting to the pre-0.8 behavior.
|
||
|
||
## v0.7.3
|
||
|
||
### Features
|
||
|
||
- `Proxy::custom(fn)` to allow dynamically picking a proxy URL
|
||
|
||
### Fixes
|
||
|
||
- fix occasional panic when program exits while `Client` or `Response` are dropping.
|
||
|
||
## v0.7.2
|
||
|
||
### Fixes
|
||
|
||
- fix a panic when redirecting and a `Authorization<Basic>` header was added (https://github.com/seanmonstar/reqwest/commit/cf246d072badd9b31b487e7a0b00490e4cc9584f)
|
||
- fix redirects so that a GET will follow 307/308 responses (https://github.com/seanmonstar/reqwest/commit/2d11a4bd7167e1bf3a35b62f5aeb36d5d294e56e)
|
||
|
||
## v0.7.1
|
||
|
||
### Fixes
|
||
|
||
- fix remove accidental `println`s in the sending of a body
|
||
- some documentation improvements
|
||
|
||
# v0.7.0
|
||
|
||
### Features
|
||
|
||
- Proxy support (#30)
|
||
- Self-signed TLS certificates (#97)
|
||
- Disabling TLS hostname validation (#89)
|
||
- A `Request` type that can be used instead of the `RequestBuilder` (#85)
|
||
- Add `Response::error_for_status()` to easily convert 400 and 500 status responses into an `Error` (#98)
|
||
- Upgrade hyper to 0.11
|
||
- Synchronous `Client` remains.
|
||
- Timeouts now affect DNS and socket connection.
|
||
- Pool much better at evicting sockets when they die.
|
||
- An `unstable` Cargo feature to enable `reqwest::unstable::async`.
|
||
- A huge docs improvement!
|
||
|
||
### Fixes
|
||
|
||
- Publicly exports `RedirectAction` and `RedirectAttempt`
|
||
- `Error::get_ref` returns `Error + Send + Sync`
|
||
|
||
### Breaking Changes
|
||
|
||
- hyper has been upgraded to 0.11, so `header`, `StatusCode`, and `Method` have breaking changes.
|
||
- `mime` has been ugpraded to 0.3, with a very different API.
|
||
- All configuration methods have been removed from the `Client`, and moved to the `ClientBuilder`.
|
||
- The `HttpVersion` type was completely removed.
|
||
- `Error::cause()` now returns `Error::get_ref().cause()`.
|
||
- All methods on `Client` that start a `RequestBuilder` now return a `Result` immediately, instead of delaying the URL parse error for later.
|
||
- The `RequestBuilder` methods all take `&mut self`, instead of moving the builder, and return `&mut Self`. (This shouldn't actually affect most people who are building a request in a single chain.)
|
||
- `Response::status()` returns a `StatusCode` instead of `&StatusCode`.
|
||
|
||
## v0.6.2
|
||
|
||
### Features
|
||
|
||
- adds `Client::referer(bool)` option to disable setting the `Referer` header during redirects (https://github.com/seanmonstar/reqwest/commit/bafcd7ae6fc232856dd6ddb8bf5b20dbbbfe0bc9)
|
||
|
||
### Fixes
|
||
|
||
- fixes filtering sensitive headers during redirects (https://github.com/seanmonstar/reqwest/issues/10)
|
||
- fixes sending of the Referer to an HTTP site when coming from HTTPS, and removes username and fragment explicitly (https://github.com/seanmonstar/reqwest/commit/d8696045b4c6bc4d9e33789cff6a9e1fa75462d7)
|
||
- documentation updates
|
||
|
||
## v0.6.1
|
||
|
||
### Features
|
||
|
||
- adds `Error::get_ref` to get the underlying error that may have occurred. Includes a `'static` bounds, which allows for downcasting (as opposed to `Error::cause`).
|
||
|
||
# v0.6.0
|
||
|
||
### Features
|
||
|
||
- Upgraded to serde `1.0`
|
||
- Added a `url` [method](https://docs.rs/reqwest/0.6.0/reqwest/struct.Error.html#method.url) to `Error`, which returns a possible associated `Url` that occurred with this error.
|
||
- Added `req.basic_auth(user, optional_pass)` [method](https://docs.rs/reqwest/0.6.0/reqwest/struct.RequestBuilder.html#method.basic_auth) to ease using `Basic` authentication.
|
||
|
||
### Breaking Changes
|
||
|
||
- The publicly exposed peer dependency serde was upgraded. It is now `serde@1.0`. Mismatched version will give a compiler error that a serde trait is not implemented.
|
||
- `Error` is no longer an `enum`, but an opaque struct. Details about it can be checked with `std::error::Error::cause()`, and methods on `reqwest::Error` include `is_http()`, `is_serialization()`, and `is_redirect()`.
|
||
- `RedirectPolicy::custom` receives different arguments, and returns different values. See the [docs](https://docs.rs/reqwest/0.6.0/reqwest/struct.RedirectPolicy.html#method.custom) for an example.
|
||
|
||
## v0.5.2
|
||
|
||
### Fixes
|
||
|
||
- fix panic with Gzip decoder on an empty body (https://github.com/seanmonstar/reqwest/issues/82)
|
||
|
||
## v0.5.1
|
||
|
||
### Features
|
||
|
||
- add `Clone` implementation for `Client`
|
||
|
||
# v0.5.0
|
||
|
||
### Features
|
||
|
||
- Automatic GZIP decoding: By default, `Client` will try to decode any responses that appear to be gzip encoded (based on headers). This can be disabled via `client.gzip(false)` (https://github.com/seanmonstar/reqwest/commit/ab5e477a123319efd4b17f3666b41b44ec244bee)
|
||
- Specify a timeout for requests using `client.timeout(duration)`. (https://github.com/seanmonstar/reqwest/commit/ec049fefbae7355f6e4ddbbc7ebedcadb30e1e04)
|
||
- Request bodies with a known length can be constructed with `Body::sized()` (https://github.com/seanmonstar/reqwest/commit/82f1877d4b6cba2fac432670ec306160aee5c501)
|
||
- Add `Client.put`, `Client.patch`, and `Client.delete` convenience methods (https://github.com/seanmonstar/reqwest/commit/c37b8aa0338ac4142763d206c6df79856915056d, https://github.com/seanmonstar/reqwest/commit/4d6582d22b23c27927e481a9c8a83ad08cfd1a2a, https://github.com/seanmonstar/reqwest/commit/a3983f3122b2d1495ea36bb5a8fd019a7605ae56)
|
||
- Add `reqwest::mime` (https://github.com/seanmonstar/reqwest/commit/0615c6d65e03ba9cb5364169c9e74f4f2a91554b)
|
||
|
||
### Breaking Changes
|
||
|
||
The only breaking change is a behavioral one, all programs should still compile without modification. The automatic GZIP decoding could interfere in cases where a user was expecting the GZIP bytes, either to save to a file or decode themselves. To restore this functionality, set `client.gzip(false)`.
|
||
|
||
# v0.4.0
|
||
|
||
- updated to serde 0.9
|
||
|
||
# v0.3.0
|
||
|
||
- updated to hyper 0.10
|
||
|
||
# v0.2.0
|
||
|
||
### Features
|
||
- add `Response.json()` method (https://github.com/seanmonstar/reqwest/commit/2d10ecc99e2aaed66616294baaf65380b446e1c6)
|
||
- add `RedirectPolicy` (https://github.com/seanmonstar/reqwest/commit/e92b3e862a1a94c0b4173a7d49a315bc121da31e)
|
||
- set an `Accept: */*` header by default if no `Accept` header is set (https://github.com/seanmonstar/reqwest/commit/559ae8011a2c098f4fe1821ec1d3444a46f4bf5e)
|
||
- add support for 307 and 308 redirects (https://github.com/seanmonstar/reqwest/commit/a54447c1d9c75dab639333265f51a91a43e99c2e)
|
||
- implement `Sync` for `Client`, and `Send` for `RequestBuilder` and `Response` (https://github.com/seanmonstar/reqwest/commit/d18a53b3fcc81c4a60875755c8e95d777a343319)
|
||
- implement `Send` for `Error` (https://github.com/seanmonstar/reqwest/commit/20b161096e67d22c962e69b2656ae9741ac73c25)
|
||
- implement `std::fmt::Debug` for all public types (https://github.com/seanmonstar/reqwest/commit/d624b0ef29020c6085ec94651a990f58ccd684e2)
|
||
|
||
### Breaking Changes
|
||
- `Error::Serialize` now has a `Box<StdError + Send + Sync>` instead of `Box<StdError>`
|
||
- `RequestBuilder` no longer has an associated lifetime (was `RequestBuilder<'a>`)
|
||
|
||
# v0.1.0
|
||
|
||
Initial release: http://seanmonstar.com/post/153221119046/introducing-reqwest
|