- Remove pub-field config structs in favor of builders (#848)
- BodyBuilder to create a response Body for test/middleware (#847)
- RequestBuilder::send_empty() convenience fn (#846)
- Rename BodyWithConfig::into_reader -> reader (#845)
- Escape hatch to send body for any method (#857)
- Reintrodice RequestBuilder::query (#843)
- Reintroduce RequestBuilder::query_pairs (#856)
- Reintroduce ResponseBuilder::send_form helper (#859)
- (internal) Use HeaderName for non-sensitive headers (#855)
- Fix broken build with rustls (#832)
- Reduce dependency count, platform-verifier feature (#833, #818)
- Ground up rewrite based on the http crate API.
- default
ureq
Rustls tls config updated to avoid panic for applications that activate the default Rustlsaws-lc-rs
feature without setting a process-wide crypto provider.ureq
will now use*ring*
in this circumstance instead of panicking.
- Bump MSRV 1.61 -> 1.63 due to rustls (#764)
- Update deps (only patch versions in Cargo.lock) (#763)
- Refork frewsxcv/rust-chunked-transfer to fix MIT/Apache2.0 license (#761)
- Enable http-crate feature for docs (#755)
- Update Rustls from 0.22 to 0.23 - this may be a breaking change if your
application depends on Rustls 0.22 (e.g. to provide a custom
rustls::ClientConfig
toureq
). See the Rustls 0.23.0 changelog for a list of breaking API changes (#753) - Rustls dep to default to ring backend. If your project uses the
default
ureq
TLS config, or constructs its ownrustls::ClientConfig
withrustls::ClientConfig::builder()
you must ensure the Rustlsaws-lc-rs
feature is not activated, or set the process default cryptography provider before constructing any configs. See the Rustls CryptoProvider docs for more information (#753) - Remove direct dep rustls-webpki (#752)
- Fix doc Rustls does now support IP address certificates (#759)(#753)
- Update deps (
base64
0.22,rustls
to 0.22.4 (#747, #748) - Parse URL after middleware to enable changing it (#745)
- Tidy up code and fix compilation (#742, 743)
hootbin
is optional dep. Tests must be run with featuretestdeps
(#729)- Exclude script files from cargo package (#728)
- Update deps (
cookie
0.18,cookie_store
0.21, unpinurl
). (#722)
- MSRV 1.61 with CI tests
- docs.rs docs
- Replace dependency on httpbin.org for tests/doc-tests. (#703)
- Remove Header struct that never should have been exported. (#696)
- Update deps (rustls 0.22) (#690)
- Unbreak feature
http-interop
. This feature is version locked to http crate 0.2 - New feature
http-crate
. This feature is for http crate 1.0 - New feature
proxy-from-env
to detect proxy settings for global Agent (ureq::get).
- Broken rustls dep (introduced new function in patch version) (#677)
- Doc and test fixes (#670, #673, #674)
- Upgraded http dep to 1.0
- http_interop to not require utf-8 headers (#672)
- http_interop implement conversion for
http::request::Parts
(#669)
- Fix regression in IPv6 handling (#635)
- Read proxy response to \r\n\r\n (#620)
- Auto-detect proxy from env vars (turned off by default) (#649)
- Conversion ureq::Response -> http::Response<Vec> (#638)
- cargo-deny CI action to disallow copy-left and duplicate deps (#661)
- Updated serde_json dependency constraint to be >=1.0.97 (#630)
- Pass User-Agent when connecting to proxy (#597)
- Proxy: Use CONNECT for HTTPS requests, but not HTTP requests (#587)
- Cookie headers are now cleared on redirect (#608)
- HTTP/1.0 responses with Content-Length no longer block until server closes the socket. (#625)
- Conversions to and from http::Response and http::request::Builder (#591)
- Updated to rustls 0.21 and rustls-webpki, which add support for IP address certificates (#601)
- Response::local_addr (#605)
- Non-empty connection pools were never dropped (#583)
- gzip: examine Content-Length header before removing (#578)
- Response::remote_addr() (#489)
- Request::query_pairs() - make query params from an Iterator of pairs (#519)
- Gzip responses with chunked encoding now work with connection pooling (#560)
- Don't panic when rustls-native-certs errors (#564)
- Responses with zero-length body now work with connection pooling (#565)
- Add tcp no_delay option (#465)
- Rework public TLS traits
- Warn if requests aren't sent (#490)
- Fixes for returning stream to pool (#509)
- Avoid extra syscalls when content is buffered (#508)
- Remove dep on sync_wrapper (#514, #528)
- Error instead of panic on large deadlines (#517)
- Make ReadWrite trait simpler (used in bespoke TLS impls) (#530)
- Buffer short response bodies (#531)
- Update cookie/cookie_store dep
- Enable
gzip
feature by default (#455) gzip
andbrotli
feature flags to enable decompression (#453, #421)- Middleware function on agent (#448)
- Agent option to preserve
Authorization
header on redirects (#445) - Deprecate re-exported serde types (#446)
- Widen type of
send_json
toimpl Serializable
(#446) native-tls
feature provides an alternative TLS backend (#449, #391)
- Re-introduce the
ureq::patch
andagent::patch
calls. - Fix regression in 2.3.x for feature native-certs (#441)
- Don't panic when given an invalid DNS name (#436).
- Update to rustls-native-certs v0.6 (#432).
- Upgrade to rustls 0.20 (#427).
- Make test mocks of Response more accurate by removing newline (#423).
- Redact sensitive headers when logging prelude (#414).
- Update to latest dependencies
- Add SOCKS4 support (#410).
- Downgrade logging on info level to debug (#409).
- Bugfix: Clear content-length header on redirect (#394, #395).
- Bugfix: don't reuse conns with bytes pending from server (#372). This reduces Transport errors when using an Agent for connection pooling.
- Bugfix: allow status lines without a reason phrase (#316)
- Example: "cureq" to easier make ad-hoc command line tests (#330)
- Override timeout per Request (#335)
- Bugfix: handle non-utf8 status and headers (#347) and better errors (#329)
- Request inspection (method, url, etc) (#310, #350)
- Bugfix: stop percent encoding cookies (#353)
- Enforce cookie RFC naming/value rules (#353)
- Bugfix: reduce error struct size (#356)
- Bugfix: Apply deadline across redirects. (#313)
- OrAnyStatus::or_any_status ergonomic helper
- Allow header lines to end with only LF (#321)
- Fix handling of 308 redirects (port from 1.5.4 branch).
- Return UnexpectedEof instead of InvalidData on short responses. (#293)
- Implement std::error::Error for error::Transport. (#299)
- Methods that formerly returned Response now return Result<Response, Error>.
You'll need to change all instances of
.call()
to.call()?
or handle errors using amatch
statement. - Non-2xx responses are considered Error by default. See Error documentation for details on how to get Response bodies for non-2xx.
- Rewrite Error type. It's now an enum of two types of error: Status and Transport. Status errors (i.e. non-2xx) can be readily turned into a Response using match statements.
- Errors now include the source error (e.g. errors from DNS or I/O) when appropriate, as well as the URL that caused an error.
- The "synthetic error" concept is removed.
- Move more configuration to Agent. Timeouts, TLS config, and proxy config now require building an Agent.
- Create AgentBuilder to separate the process of building an agent from using the resulting agent. Headers can be set on an AgentBuilder, not the resulting Agent.
- Agent is cheaply cloneable with an internal Arc. This makes it easy to share a single agent throughout your program.
- There is now a default timeout_connect of 30 seconds. Read and write timeouts continue to be unset by default.
- Add ureq::request_url and Agent::request_url, to send requests with already-parsed URLs.
- Remove native_tls support.
- Remove convenience methods
options(url)
,trace(url)
, andpatch(url)
. To send requests with those verbs userequest(method, url)
. - Remove Request::build. This was a workaround because some of Request's
methods took
&mut self
instead ofmut self
, and is no longer needed. You can simply delete any calls toRequest::build
. - Remove Agent::set_cookie.
- Remove Header from the public API. The type wasn't used by any public methods.
- Remove basic auth support. The API was incomplete. We may add back something better in the future.
- Remove into_json_deserialize. Now into_json handles both serde_json::Value
and other types that implement serde::Deserialize. If you were using
serde_json before, you will probably have to explicitly annotate a type,
like:
let v: serde_json::Value = response.into_json();
. - Rewrite README and top-level documentation.
- Remove error_on_non_2xx. (#272)
- Do more validation on status line. (#266)
- (internal) Add history to response objects (#275)
- Refactor Error to use an enum for easier extraction of status code errors.
- (Internal) Use BufRead::read_line when reading headers.
- These changes are mostly already listed under 2.0.0.
- Remove the "synthetic error" concept. Methods that formerly returned Response now return Result<Response, Error>.
- Rewrite Error type. Instead of an enum, it's now a struct with an ErrorKind. This allows us to store the source error when appropriate, as well as the URL that caused an error.
- Move more configuration to Agent. Timeouts, TLS config, and proxy config now require building an Agent.
- Create AgentBuilder to separate the process of building an agent from using the resulting agent. Headers can be set on an AgentBuilder, not the resulting Agent.
- Agent is cheaply cloneable with an internal Arc. This makes it easy to share a single agent throughout your program.
- There is now a default timeout_connect of 30 seconds. Read and write timeouts continue to be unset by default.
- Add ureq::request_url and Agent::request_url, to send requests with already-parsed URLs.
- Remove native_tls support.
- Remove convenience methods
options(url)
,trace(url)
, andpatch(url)
. To send requests with those verbs userequest(method, url)
. - Remove Request::build. This was a workaround because some of Request's
methods took
&mut self
instead ofmut self
, and is no longer needed. You can simply delete any calls toRequest::build
. - Remove Agent::set_cookie.
- Remove Header from the public API. The type wasn't used by any public methods.
- Remove basic auth support. The API was incomplete. We may add back something better in the future.
- Remove into_json_deserialize. Now into_json handles both serde_json::Value
and other types that implement serde::Deserialize. If you were using
serde_json before, you will probably have to explicitly annotate a type,
like:
let v: serde_json::Value = response.into_json();
. - Rewrite README and top-level documentation.
- Remove 'static constraint on Request.send(), allowing a wider variety of types to be passed. Also eliminate some copying. (#205).
- Allow turning a Response into an Error (#214).
- Update env_logger to 0.8.1 (#195).
- Remove convenience method for CONNECT verb (#177).
- Fix bugs in handling of timeout_read (#197 and #198).
- Use cookie_store crate for correct cookie handling (#169).
- Fix bug in picking wrong host for redirects introduced in 1.5.0 (#180).
- Allow proxy settings on Agent (#178).
- Add pluggable name resolution. Users can now override the IP addresses for hostnames of their choice (#148).
- bugfix: Don't re-pool streams on drop. This would occur if the user called
response.into_reader()
and dropped the resultingRead
before reading all the way to EOF. The result would be a BadStatus error on the next request to the same hostname. This only affected users using an explicit Agent (#160). - Automatically set Transfer-Encoding: chunked when using
send
(#86). into_reader()
now returnsimpl Read + Send
instead ofimpl Read
(#156).- Add support for log crate (#170).
- Retry broken connections in more cases (should reduce BadStatus errors; #168).
- Use buffer to avoid byte-by-byte parsing result in multiple syscalls.
- Allow pooling multiple connections per host.
- Put version in user agent "ureq/1.4.1".
- Propagate WouldBlock in io:Error for Response::to_json.
- Merge multiple cookies into one header to be spec compliant.
- Allow setting TLSConnector for native-tls.
- Remove brackets against TLS lib when IPv6 addr is used as hostname.
- Include proxy in connection pool keys.
- Stop assuming localhost for URLs without host part.
- Error if body length is less than content-length.
- Validate header names.
- Changelog start