diff --git a/Cargo.toml b/Cargo.toml index 633e404f1..bfc2ed099 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,7 @@ authors = ["Sean McArthur "] license = "MIT/Apache-2.0" [dependencies] -hyper = { version = "0.9" , default-features = false } +hyper = { version = "0.9.14" , default-features = false } log = "0.3" native-tls = "0.1" serde = "0.8" diff --git a/src/client.rs b/src/client.rs index ace7c8956..2dd616fb8 100644 --- a/src/client.rs +++ b/src/client.rs @@ -3,7 +3,7 @@ use std::io::{self, Read}; use std::sync::{Arc, Mutex}; use hyper::client::IntoUrl; -use hyper::header::{Headers, ContentType, Location, Referer, UserAgent}; +use hyper::header::{Headers, ContentType, Location, Referer, UserAgent, Accept}; use hyper::method::Method; use hyper::status::StatusCode; use hyper::version::HttpVersion; @@ -197,6 +197,10 @@ impl RequestBuilder { self.headers.set(UserAgent(DEFAULT_USER_AGENT.to_owned())); } + if !self.headers.has::() { + self.headers.set(Accept::star()); + } + let client = self.client; let mut method = self.method; let mut url = try!(self.url); diff --git a/tests/client.rs b/tests/client.rs index 1cc710e8b..46d9ca739 100644 --- a/tests/client.rs +++ b/tests/client.rs @@ -11,6 +11,7 @@ fn test_get() { GET /1 HTTP/1.1\r\n\ Host: $HOST\r\n\ User-Agent: $USERAGENT\r\n\ + Accept: */*\r\n\ \r\n\ ", response: b"\ @@ -43,6 +44,7 @@ fn test_redirect_301_and_302_and_303_changes_post_to_get() { POST /{} HTTP/1.1\r\n\ Host: $HOST\r\n\ User-Agent: $USERAGENT\r\n\ + Accept: */*\r\n\ Content-Length: 0\r\n\ \r\n\ ", code), @@ -59,6 +61,7 @@ fn test_redirect_301_and_302_and_303_changes_post_to_get() { GET /dst HTTP/1.1\r\n\ Host: $HOST\r\n\ User-Agent: $USERAGENT\r\n\ + Accept: */*\r\n\ Referer: http://$HOST/{}\r\n\ \r\n\ ", code), @@ -88,6 +91,7 @@ fn test_redirect_307_and_308_tries_to_post_again() { POST /{} HTTP/1.1\r\n\ Host: $HOST\r\n\ User-Agent: $USERAGENT\r\n\ + Accept: */*\r\n\ Content-Length: 5\r\n\ \r\n\ Hello\ @@ -105,6 +109,7 @@ fn test_redirect_307_and_308_tries_to_post_again() { POST /dst HTTP/1.1\r\n\ Host: $HOST\r\n\ User-Agent: $USERAGENT\r\n\ + Accept: */*\r\n\ Referer: http://$HOST/{}\r\n\ Content-Length: 5\r\n\ \r\n\ @@ -137,6 +142,7 @@ fn test_redirect_307_does_not_try_if_reader_cannot_reset() { POST /{} HTTP/1.1\r\n\ Host: $HOST\r\n\ User-Agent: $USERAGENT\r\n\ + Accept: */*\r\n\ Transfer-Encoding: chunked\r\n\ \r\n\ 5\r\n\ @@ -168,6 +174,7 @@ fn test_redirect_policy_can_return_errors() { GET /loop HTTP/1.1\r\n\ Host: $HOST\r\n\ User-Agent: $USERAGENT\r\n\ + Accept: */*\r\n\ \r\n\ ", response: b"\ @@ -193,6 +200,7 @@ fn test_redirect_policy_can_stop_redirects_without_an_error() { GET /no-redirect HTTP/1.1\r\n\ Host: $HOST\r\n\ User-Agent: $USERAGENT\r\n\ + Accept: */*\r\n\ \r\n\ ", response: b"\ @@ -213,3 +221,30 @@ fn test_redirect_policy_can_stop_redirects_without_an_error() { assert_eq!(res.status(), &reqwest::StatusCode::Found); assert_eq!(res.headers().get(), Some(&reqwest::header::Server("test-dont".to_string()))); } + +#[test] +fn test_accept_header_is_not_changed_if_set() { + let server = server! { + request: b"\ + GET /accept HTTP/1.1\r\n\ + Host: $HOST\r\n\ + Accept: application/json\r\n\ + User-Agent: $USERAGENT\r\n\ + \r\n\ + ", + response: b"\ + HTTP/1.1 200 OK\r\n\ + Server: test-accept\r\n\ + Content-Length: 0\r\n\ + \r\n\ + " + }; + let mut client = reqwest::Client::new().unwrap(); + + let res = client.get(&format!("http://{}/accept", server.addr())) + .header(reqwest::header::Accept::json()) + .send() + .unwrap(); + + assert_eq!(res.status(), &reqwest::StatusCode::Ok); +}