diff --git a/CHANGES.md b/CHANGES.md index d74bdd9b5..04f1d2bbe 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -17,6 +17,7 @@ * Use `&mut self` instead of `&self` for Middleware trait +* Added header `User-Agent: Actix-web/` to default headers when building a request ### Removed diff --git a/src/client/request.rs b/src/client/request.rs index 4fef3e5d0..bb338482b 100644 --- a/src/client/request.rs +++ b/src/client/request.rs @@ -506,7 +506,7 @@ impl ClientRequestBuilder { } /// Do not add default request headers. - /// By default `Accept-Encoding` header is set. + /// By default `Accept-Encoding` and `User-Agent` headers are set. pub fn no_default_headers(&mut self) -> &mut Self { self.default_headers = false; self @@ -608,6 +608,18 @@ impl ClientRequestBuilder { } else { self.header(header::ACCEPT_ENCODING, "gzip, deflate"); } + + let contains = if let Some(parts) = parts(&mut self.request, &self.err) { + parts.headers.contains_key(header::USER_AGENT) + } else { + true + }; + if !contains { + self.header( + header::USER_AGENT, + concat!("Actix-web/", env!("CARGO_PKG_VERSION")), + ); + } } let mut request = self.request.take().expect("cannot reuse request builder"); diff --git a/tests/test_client.rs b/tests/test_client.rs index 9b9fb0e82..3128bb942 100644 --- a/tests/test_client.rs +++ b/tests/test_client.rs @@ -432,3 +432,29 @@ fn test_client_cookie_handling() { let c2 = response.cookie("cookie2").expect("Missing cookie2"); assert_eq!(c2, &cookie2); } + +#[test] +fn test_default_headers() { + let srv = test::TestServer::new(|app| app.handler(|_| HttpResponse::Ok().body(STR))); + + let request = srv.get().finish().unwrap(); + let repr = format!("{:?}", request); + assert!(repr.contains("\"accept-encoding\": \"gzip, deflate\"")); + assert!(repr.contains(concat!( + "\"user-agent\": \"Actix-web/", + env!("CARGO_PKG_VERSION"), + "\"" + ))); + + let request_override = srv.get() + .header("User-Agent", "test") + .finish() + .unwrap(); + let repr_override = format!("{:?}", request_override); + assert!(repr_override.contains("\"user-agent\": \"test\"")); + assert!(!repr_override.contains(concat!( + "\"user-agent\": \"Actix-web/", + env!("CARGO_PKG_VERSION"), + "\"" + ))); +}