feat: set default headers
This commit is contained in:
		| @@ -63,6 +63,7 @@ pub struct ClientBuilder { | |||||||
|  |  | ||||||
| struct Config { | struct Config { | ||||||
|     gzip: bool, |     gzip: bool, | ||||||
|  |     headers: Headers, | ||||||
|     hostname_verification: bool, |     hostname_verification: bool, | ||||||
|     proxies: Vec<Proxy>, |     proxies: Vec<Proxy>, | ||||||
|     redirect_policy: RedirectPolicy, |     redirect_policy: RedirectPolicy, | ||||||
| @@ -76,9 +77,15 @@ impl ClientBuilder { | |||||||
|     /// Constructs a new `ClientBuilder` |     /// Constructs a new `ClientBuilder` | ||||||
|     pub fn new() -> ClientBuilder { |     pub fn new() -> ClientBuilder { | ||||||
|         match TlsConnector::builder() { |         match TlsConnector::builder() { | ||||||
|             Ok(tls_connector_builder) => ClientBuilder { |             Ok(tls_connector_builder) => { | ||||||
|  |                 let mut headers = Headers::with_capacity(2); | ||||||
|  |                 headers.set(UserAgent::new(DEFAULT_USER_AGENT)); | ||||||
|  |                 headers.set(Accept::star()); | ||||||
|  |  | ||||||
|  |                 ClientBuilder { | ||||||
|                     config: Some(Config { |                     config: Some(Config { | ||||||
|                         gzip: true, |                         gzip: true, | ||||||
|  |                         headers: headers, | ||||||
|                         hostname_verification: true, |                         hostname_verification: true, | ||||||
|                         proxies: Vec::new(), |                         proxies: Vec::new(), | ||||||
|                         redirect_policy: RedirectPolicy::default(), |                         redirect_policy: RedirectPolicy::default(), | ||||||
| @@ -88,6 +95,7 @@ impl ClientBuilder { | |||||||
|                         dns_threads: 4, |                         dns_threads: 4, | ||||||
|                     }), |                     }), | ||||||
|                     err: None, |                     err: None, | ||||||
|  |                 } | ||||||
|             }, |             }, | ||||||
|             Err(e) => ClientBuilder { |             Err(e) => ClientBuilder { | ||||||
|                 config: None, |                 config: None, | ||||||
| @@ -131,6 +139,7 @@ impl ClientBuilder { | |||||||
|             inner: Arc::new(ClientRef { |             inner: Arc::new(ClientRef { | ||||||
|                 gzip: config.gzip, |                 gzip: config.gzip, | ||||||
|                 hyper: hyper_client, |                 hyper: hyper_client, | ||||||
|  |                 headers: config.headers, | ||||||
|                 proxies: proxies, |                 proxies: proxies, | ||||||
|                 redirect_policy: config.redirect_policy, |                 redirect_policy: config.redirect_policy, | ||||||
|                 referer: config.referer, |                 referer: config.referer, | ||||||
| @@ -189,6 +198,15 @@ impl ClientBuilder { | |||||||
|         self |         self | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /// Sets the default headers for every request. | ||||||
|  |     #[inline] | ||||||
|  |     pub fn default_headers(&mut self, headers: Headers) -> &mut ClientBuilder { | ||||||
|  |         if let Some(config) = config_mut(&mut self.config, &self.err) { | ||||||
|  |             config.headers.extend(headers.iter()); | ||||||
|  |         } | ||||||
|  |         self | ||||||
|  |     } | ||||||
|  |  | ||||||
|     /// Enable auto gzip decompression by checking the ContentEncoding response header. |     /// Enable auto gzip decompression by checking the ContentEncoding response header. | ||||||
|     /// |     /// | ||||||
|     /// Default is enabled. |     /// Default is enabled. | ||||||
| @@ -372,17 +390,13 @@ impl Client { | |||||||
|         let ( |         let ( | ||||||
|             method, |             method, | ||||||
|             url, |             url, | ||||||
|             mut headers, |             user_headers, | ||||||
|             body |             body | ||||||
|         ) = request::pieces(req); |         ) = request::pieces(req); | ||||||
|  |  | ||||||
|         if !headers.has::<UserAgent>() { |         let mut headers = self.inner.headers.clone(); // default headers | ||||||
|             headers.set(UserAgent::new(DEFAULT_USER_AGENT)); |         headers.extend(user_headers.iter()); | ||||||
|         } |  | ||||||
|  |  | ||||||
|         if !headers.has::<Accept>() { |  | ||||||
|             headers.set(Accept::star()); |  | ||||||
|         } |  | ||||||
|         if self.inner.gzip && |         if self.inner.gzip && | ||||||
|             !headers.has::<AcceptEncoding>() && |             !headers.has::<AcceptEncoding>() && | ||||||
|             !headers.has::<Range>() { |             !headers.has::<Range>() { | ||||||
| @@ -442,6 +456,7 @@ impl fmt::Debug for ClientBuilder { | |||||||
|  |  | ||||||
| struct ClientRef { | struct ClientRef { | ||||||
|     gzip: bool, |     gzip: bool, | ||||||
|  |     headers: Headers, | ||||||
|     hyper: HyperClient, |     hyper: HyperClient, | ||||||
|     proxies: Arc<Vec<Proxy>>, |     proxies: Arc<Vec<Proxy>>, | ||||||
|     redirect_policy: RedirectPolicy, |     redirect_policy: RedirectPolicy, | ||||||
|   | |||||||
| @@ -8,7 +8,7 @@ use futures::sync::{mpsc, oneshot}; | |||||||
|  |  | ||||||
| use request::{self, Request, RequestBuilder}; | use request::{self, Request, RequestBuilder}; | ||||||
| use response::{self, Response}; | use response::{self, Response}; | ||||||
| use {async_impl, Certificate, Identity, Method, IntoUrl, Proxy, RedirectPolicy, wait}; | use {async_impl, header, Certificate, Identity, Method, IntoUrl, Proxy, RedirectPolicy, wait}; | ||||||
|  |  | ||||||
| /// A `Client` to make Requests with. | /// A `Client` to make Requests with. | ||||||
| /// | /// | ||||||
| @@ -167,6 +167,50 @@ impl ClientBuilder { | |||||||
|         self |         self | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /// Sets the default headers for every request. | ||||||
|  |     /// | ||||||
|  |     /// # Example | ||||||
|  |     /// | ||||||
|  |     /// ```rust | ||||||
|  |     /// use reqwest::header; | ||||||
|  |     /// # fn build_client() -> Result<(), Box<std::error::Error>> { | ||||||
|  |     /// let mut headers = header::Headers::new(); | ||||||
|  |     /// headers.set(header::Authorization("secret".to_string())); | ||||||
|  |     /// | ||||||
|  |     /// // get a client builder | ||||||
|  |     /// let client = reqwest::Client::builder() | ||||||
|  |     ///     .default_headers(headers) | ||||||
|  |     ///     .build()?; | ||||||
|  |     /// let res = client.get("https://www.rust-lang.org").send()?; | ||||||
|  |     /// # Ok(()) | ||||||
|  |     /// # } | ||||||
|  |     /// ``` | ||||||
|  |     /// | ||||||
|  |     /// Override the default headers: | ||||||
|  |     /// | ||||||
|  |     /// ```rust | ||||||
|  |     /// use reqwest::header; | ||||||
|  |     /// # fn build_client() -> Result<(), Box<std::error::Error>> { | ||||||
|  |     /// let mut headers = header::Headers::new(); | ||||||
|  |     /// headers.set(header::Authorization("secret".to_string())); | ||||||
|  |     /// | ||||||
|  |     /// // get a client builder | ||||||
|  |     /// let client = reqwest::Client::builder() | ||||||
|  |     ///     .default_headers(headers) | ||||||
|  |     ///     .build()?; | ||||||
|  |     /// let res = client | ||||||
|  |     ///     .get("https://www.rust-lang.org") | ||||||
|  |     ///     .header(header::Authorization("token".to_string())) | ||||||
|  |     ///     .send()?; | ||||||
|  |     /// # Ok(()) | ||||||
|  |     /// # } | ||||||
|  |     /// ``` | ||||||
|  |     #[inline] | ||||||
|  |     pub fn default_headers(&mut self, headers: header::Headers) -> &mut ClientBuilder { | ||||||
|  |         self.inner.default_headers(headers); | ||||||
|  |         self | ||||||
|  |     } | ||||||
|  |  | ||||||
|     /// Enable auto gzip decompression by checking the ContentEncoding response header. |     /// Enable auto gzip decompression by checking the ContentEncoding response header. | ||||||
|     /// |     /// | ||||||
|     /// Default is enabled. |     /// Default is enabled. | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user