From 476983965cf2bb486080a3e3bbe4da12fc97973c Mon Sep 17 00:00:00 2001 From: Sam Cutler Date: Mon, 13 Oct 2025 14:58:13 +0100 Subject: [PATCH] Add default headers as request is built --- src/async_impl/client.rs | 9 ++++++++- src/blocking/client.rs | 9 ++++++++- tests/client.rs | 23 ++++++++++++++++++++++- 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/src/async_impl/client.rs b/src/async_impl/client.rs index 8f3bebb1e..265c0f964 100644 --- a/src/async_impl/client.rs +++ b/src/async_impl/client.rs @@ -2442,7 +2442,14 @@ impl Client { /// /// This method fails whenever the supplied `Url` cannot be parsed. pub fn request(&self, method: Method, url: U) -> RequestBuilder { - let req = url.into_url().map(move |url| Request::new(method, url)); + let req = url.into_url().map(move |url| { + let mut req = Request::new(method, url); + let headers = req.headers_mut(); + for (key, value) in &self.inner.headers { + headers.insert(key, value.clone()); + } + req + }); RequestBuilder::new(self.clone(), req) } diff --git a/src/blocking/client.rs b/src/blocking/client.rs index 255d9d8aa..bd12967be 100644 --- a/src/blocking/client.rs +++ b/src/blocking/client.rs @@ -1289,7 +1289,14 @@ impl Client { /// /// This method fails whenever supplied `Url` cannot be parsed. pub fn request(&self, method: Method, url: U) -> RequestBuilder { - let req = url.into_url().map(move |url| Request::new(method, url)); + let req = url.into_url().map(move |url| { + let mut req = Request::new(method, url); + let headers = req.headers_mut(); + for (key, value) in &self.inner.headers { + headers.insert(key, value.clone()); + } + req + }); RequestBuilder::new(self.clone(), req) } diff --git a/tests/client.rs b/tests/client.rs index fce977f69..097bb71e0 100644 --- a/tests/client.rs +++ b/tests/client.rs @@ -4,7 +4,10 @@ mod support; use support::server; -use http::header::{CONTENT_LENGTH, CONTENT_TYPE, TRANSFER_ENCODING}; +use http::{ + header::{CONTENT_LENGTH, CONTENT_TYPE, TRANSFER_ENCODING}, + HeaderMap, HeaderValue, +}; #[cfg(feature = "json")] use std::collections::HashMap; @@ -528,3 +531,21 @@ async fn error_has_url() { let err = reqwest::get(u).await.unwrap_err(); assert_eq!(err.url().map(AsRef::as_ref), Some(u), "{err:?}"); } + +#[test] +fn client_request_builder_includes_default_headers() { + let mut headers = HeaderMap::new(); + headers.insert("X-MY-HEADER", HeaderValue::from_static("value")); + let client = Client::builder() + .default_headers(headers) + .build() + .expect("build client"); + let req = client + .get("http://google.com") + .build() + .expect("build request"); + assert!(req + .headers() + .get("X-MY-HEADER") + .is_some_and(|v| v == HeaderValue::from_static("value"))); +}