Skip to content

Latest commit

 

History

History
476 lines (309 loc) · 16.4 KB

CHANGELOG.md

File metadata and controls

476 lines (309 loc) · 16.4 KB

Unreleased

  • Reqwest no longer sets a User-Agent header by default. If you are interacting with services which require a user agent, you will need to set one manually.

v0.9.18

  • Fix Cookie headers to no longer send as percent-encoded (instead, exactly as sent by the server).

v0.9.17

  • Fix Cookie headers so as to not include attributes from the Set-Cookie (like HttpOnly, Secure, etc).

v0.9.16

  • Add Response::text_with_charset() to allow setting the default charset to decode.
  • Add Error::source() implementation.
  • Add async::ClientBuilder::timeout() option, will timeout the connect, request, and response body futures.
  • Fix gzip + chunked transfer encoding issue preventing connection reuse.
  • Fix RequestBuilder::query() to not add just "?" if the encoded query is empty.
  • Fix including new cookie headers when response is a redirect.

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 filenames 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:

    // 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().

    // 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.

    // 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.

    [dependencies]
    reqwest = { version = "0.9", features = ["hyper-011"] }

    And then usage:

    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

v0.7.1

Fixes

  • fix remove accidental printlns 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

Fixes

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 to Error, which returns a possible associated Url that occurred with this error.
  • Added req.basic_auth(user, optional_pass) method 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 for an example.

v0.5.2

Fixes

v0.5.1

Features

  • add Clone implementation for Client

v0.5.0

Features

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

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