API changes for 2.0
* Remove Request::build * All mutations on Request follow builder pattern The previous `build()` on request was necessary because mutating functions did not follow a proper builder pattern (taking `&mut self` instead of `mut self`). With a proper builder pattern, the need for `.build()` goes away. * All Request body and call methods consume self Anything which "executes" the request will now consume the `Request` to produce a `Result<Response>`. * Move all config from request to agent builder Timeouts, redirect config, proxy settings and TLS config are now on `AgentBuilder`. * Rename max_pool_connections -> max_idle_connections * Rename max_pool_connections_per_host -> max_idle_connections_per_host Consistent internal and external naming. * Introduce new AgentConfig for static config created by builder. `Agent` can be seen as having two parts. Static config and a mutable shared state between all states. The static config goes into `AgentConfig` and the mutable shared state into `AgentState`. * Replace all use of `Default` for `new`. Deriving or implementing `Default` makes for a secondary instantiation API. It is useful in some cases, but gets very confusing when there is both `new` _and_ a `Default`. It's especially devious for derived values where a reasonable default is not `0`, `false` or `None`. * Remove feature native_tls, we want only native rustls. This feature made for very clunky handling throughout the code. From a security point of view, it's better to stick with one single TLS API. Rustls recently got an official audit (very positive). https://github.com/ctz/rustls/tree/master/audit Rustls deliberately omits support for older, insecure TLS such as TLS 1.1 or RC4. This might be a problem for a user of ureq, but on balance not considered important enough to keep native_tls. * Remove auth and support for basic auth. The API just wasn't enough. A future reintroduction should at least also provide a `Bearer` mechanism and possibly more. * Rename jar -> cookie_store * Rename jar -> cookie_tin Just make some field names sync up with the type. * Drop "cookies" as default feature The need for handling cookies is probably rare, let's not enable it by default. * Change all feature checks for "cookie" to "cookies" The outward facing feature is "cookies" and I think it's better form that the code uses the official feature name instead of the optional library "cookies". * Keep `set` on Agent level as well as AgentBuilder. The idea is that an auth exchange might result in a header that need to be set _after_ the agent has been built.
This commit is contained in:
@@ -29,7 +29,11 @@ fn redirect_many() {
|
||||
test::set_handler("/redirect_many2", |_| {
|
||||
test::make_response(302, "Go here", vec!["Location: /redirect_many3"], vec![])
|
||||
});
|
||||
let result = get("test://host/redirect_many1").redirects(1).call();
|
||||
let result = builder()
|
||||
.redirects(1)
|
||||
.build()
|
||||
.get("test://host/redirect_many1")
|
||||
.call();
|
||||
assert!(matches!(result, Err(Error::TooManyRedirects)));
|
||||
}
|
||||
|
||||
@@ -38,7 +42,11 @@ fn redirect_off() -> Result<(), Error> {
|
||||
test::set_handler("/redirect_off", |_| {
|
||||
test::make_response(302, "Go here", vec!["Location: somewhere.else"], vec![])
|
||||
});
|
||||
let resp = get("test://host/redirect_off").redirects(0).call()?;
|
||||
let resp = builder()
|
||||
.redirects(0)
|
||||
.build()
|
||||
.get("test://host/redirect_off")
|
||||
.call()?;
|
||||
assert_eq!(resp.status(), 302);
|
||||
assert!(resp.has("Location"));
|
||||
assert_eq!(resp.header("Location").unwrap(), "somewhere.else");
|
||||
@@ -96,7 +104,7 @@ fn redirect_host() {
|
||||
Ok(())
|
||||
});
|
||||
let url = format!("http://localhost:{}/", srv.port);
|
||||
let resp = crate::Agent::default().get(&url).call();
|
||||
let resp = crate::Agent::new().get(&url).call();
|
||||
let err = resp.err();
|
||||
assert!(
|
||||
matches!(err, Some(Error::DnsFailed(_))),
|
||||
|
||||
Reference in New Issue
Block a user