Remove content-encoding and content-length headers from response, if we ungzip the response,
and add accept-encoding: gzip header to the reqeuest when ungzipping is enabled
This commit is contained in:
		| @@ -5,7 +5,7 @@ use std::sync::atomic::{AtomicBool, Ordering}; | |||||||
|  |  | ||||||
| use hyper::client::IntoUrl; | use hyper::client::IntoUrl; | ||||||
| use hyper::header::{Headers, ContentType, Location, Referer, UserAgent, Accept, ContentEncoding, Encoding, ContentLength, | use hyper::header::{Headers, ContentType, Location, Referer, UserAgent, Accept, ContentEncoding, Encoding, ContentLength, | ||||||
|     TransferEncoding}; |     TransferEncoding, AcceptEncoding, Range, qitem}; | ||||||
| use hyper::method::Method; | use hyper::method::Method; | ||||||
| use hyper::status::StatusCode; | use hyper::status::StatusCode; | ||||||
| use hyper::version::HttpVersion; | use hyper::version::HttpVersion; | ||||||
| @@ -226,7 +226,11 @@ impl RequestBuilder { | |||||||
|         if !self.headers.has::<Accept>() { |         if !self.headers.has::<Accept>() { | ||||||
|             self.headers.set(Accept::star()); |             self.headers.set(Accept::star()); | ||||||
|         } |         } | ||||||
|  |         if self.client.auto_ungzip.load(Ordering::Relaxed) && | ||||||
|  |             !self.headers.has::<AcceptEncoding>() && | ||||||
|  |             !self.headers.has::<Range>() { | ||||||
|  |             self.headers.set(AcceptEncoding(vec![qitem(Encoding::Gzip)])); | ||||||
|  |         } | ||||||
|         let client = self.client; |         let client = self.client; | ||||||
|         let mut method = self.method; |         let mut method = self.method; | ||||||
|         let mut url = try!(self.url); |         let mut url = try!(self.url); | ||||||
| @@ -411,18 +415,23 @@ impl Decoder { | |||||||
|     /// how to decode the content body of the request. |     /// how to decode the content body of the request. | ||||||
|     /// |     /// | ||||||
|     /// Uses the correct variant by inspecting the Content-Encoding header. |     /// Uses the correct variant by inspecting the Content-Encoding header. | ||||||
|     fn from_hyper_response(res: ::hyper::client::Response, check_gzip: bool) -> Self { |     fn from_hyper_response(mut res: ::hyper::client::Response, check_gzip: bool) -> Self { | ||||||
|         if !check_gzip { |         if !check_gzip { | ||||||
|             return Decoder::PlainText(res); |             return Decoder::PlainText(res); | ||||||
|         } |         } | ||||||
|  |         let content_encoding_gzip: bool; | ||||||
|         let mut is_gzip = { |         let mut is_gzip = { | ||||||
|             res.headers.get::<ContentEncoding>().map_or(false, |encs|{ |             content_encoding_gzip = res.headers.get::<ContentEncoding>().map_or(false, |encs|{ | ||||||
|                 encs.contains(&Encoding::Gzip) |                 encs.contains(&Encoding::Gzip) | ||||||
|             }) || |             }); | ||||||
|             res.headers.get::<TransferEncoding>().map_or(false, |encs|{ |             content_encoding_gzip || res.headers.get::<TransferEncoding>().map_or(false, |encs|{ | ||||||
|                 encs.contains(&Encoding::Gzip) |                 encs.contains(&Encoding::Gzip) | ||||||
|             }) |             }) | ||||||
|         }; |         }; | ||||||
|  |         if content_encoding_gzip { | ||||||
|  |             res.headers.remove::<ContentEncoding>(); | ||||||
|  |             res.headers.remove::<ContentLength>(); | ||||||
|  |         } | ||||||
|         if is_gzip { |         if is_gzip { | ||||||
|             if let Some(content_length) = res.headers.get::<ContentLength>() { |             if let Some(content_length) = res.headers.get::<ContentLength>() { | ||||||
|                 if content_length.0 == 0 { |                 if content_length.0 == 0 { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user