Merge pull request #232 from tafia/hyper-proxy
Remove proxy handling in favor of hyper-proxy crate
This commit is contained in:
		| @@ -1,12 +1,15 @@ | ||||
| use std::fmt; | ||||
| use std::{io, fmt}; | ||||
| use std::sync::Arc; | ||||
| use std::time::Duration; | ||||
|  | ||||
| use bytes::Bytes; | ||||
| use futures::{Async, Future, Poll}; | ||||
| use hyper::client::FutureResponse; | ||||
| use hyper::client::{Connect, FutureResponse, HttpConnector}; | ||||
| use hyper::header::{Headers, Location, Referer, UserAgent, Accept, Encoding, | ||||
|                     AcceptEncoding, Range, qitem}; | ||||
| use hyper_proxy::ProxyConnector; | ||||
| use hyper_proxy::Proxy as HyperProxy; | ||||
| use hyper_tls::HttpsConnector; | ||||
| use native_tls::{TlsConnector, TlsConnectorBuilder}; | ||||
| use tokio_core::reactor::Handle; | ||||
|  | ||||
| @@ -14,7 +17,6 @@ use tokio_core::reactor::Handle; | ||||
| use super::body; | ||||
| use super::request::{self, Request, RequestBuilder}; | ||||
| use super::response::{self, Response}; | ||||
| use connect::Connector; | ||||
| use into_url::to_uri; | ||||
| use redirect::{self, RedirectPolicy, check_redirect, remove_sensitive_headers}; | ||||
| use {Certificate, Identity, IntoUrl, Method, proxy, Proxy, StatusCode, Url}; | ||||
| @@ -122,26 +124,31 @@ impl ClientBuilder { | ||||
|             .take() | ||||
|             .expect("ClientBuilder cannot be reused after building a Client"); | ||||
|  | ||||
|         let tls = try_!(config.tls.build()); | ||||
|  | ||||
|         let proxies = Arc::new(config.proxies); | ||||
|  | ||||
|         let mut connector = Connector::new(config.dns_threads, tls, proxies.clone(), handle); | ||||
|         let mut https_connector = try_!(HttpsConnector::new(config.dns_threads, handle)); | ||||
|         if !config.hostname_verification { | ||||
|             connector.danger_disable_hostname_verification(); | ||||
|             https_connector.danger_disable_hostname_verification(true); | ||||
|         } | ||||
|         let mut connector = ProxyConnector::unsecured(https_connector); | ||||
|         let tls = try_!(config.tls.build()); | ||||
|         connector.set_tls(Some(tls)); | ||||
|         connector.extend_proxies(config.proxies.iter().map(|p| p.inner.clone())); | ||||
|  | ||||
|         let hyper_client = ::hyper::Client::configure() | ||||
|             .connector(connector) | ||||
|             .no_proto() | ||||
|             .build(handle); | ||||
|  | ||||
|         // save proxies for http request | ||||
|         let mut proxy = ProxyConnector::unsecured(()); | ||||
|         proxy.extend_proxies(config.proxies.into_iter().map(|p| p.inner)); | ||||
|  | ||||
|         Ok(Client { | ||||
|             inner: Arc::new(ClientRef { | ||||
|                 gzip: config.gzip, | ||||
|                 hyper: hyper_client, | ||||
|                 proxy: proxy, | ||||
|                 headers: config.headers, | ||||
|                 proxies: proxies, | ||||
|                 redirect_policy: config.redirect_policy, | ||||
|                 referer: config.referer, | ||||
|             }), | ||||
| @@ -277,7 +284,7 @@ fn config_mut<'a>(config: &'a mut Option<Config>, err: &Option<::Error>) -> Opti | ||||
|     } | ||||
| } | ||||
|  | ||||
| type HyperClient = ::hyper::Client<Connector>; | ||||
| type HyperClient = ::hyper::Client<::hyper_proxy::ProxyConnector<HttpsConnector<HttpConnector>>>; | ||||
|  | ||||
| impl Client { | ||||
|     /// Constructs a new `Client`. | ||||
| @@ -413,12 +420,10 @@ impl Client { | ||||
|             reusable | ||||
|         }); | ||||
|  | ||||
|         if proxy::is_proxied(&self.inner.proxies, &url) { | ||||
|             if uri.scheme() == Some("http") { | ||||
|                 req.set_proxy(true); | ||||
|             } | ||||
|         if let Some(headers) = self.inner.proxy.http_headers(&uri) { | ||||
|             req.set_proxy(true); | ||||
|             req.headers_mut().extend(headers.iter()); | ||||
|         } | ||||
|  | ||||
|         let in_flight = self.inner.hyper.request(req); | ||||
|  | ||||
|         Pending { | ||||
| @@ -458,8 +463,8 @@ impl fmt::Debug for ClientBuilder { | ||||
| struct ClientRef { | ||||
|     gzip: bool, | ||||
|     headers: Headers, | ||||
|     proxy: ProxyConnector<()>, | ||||
|     hyper: HyperClient, | ||||
|     proxies: Arc<Vec<Proxy>>, | ||||
|     redirect_policy: RedirectPolicy, | ||||
|     referer: bool, | ||||
| } | ||||
| @@ -557,10 +562,9 @@ impl Future for PendingRequest { | ||||
|                             if let Some(Some(ref body)) = self.body { | ||||
|                                 req.set_body(body.clone()); | ||||
|                             } | ||||
|                             if proxy::is_proxied(&self.client.proxies, &self.url) { | ||||
|                                 if uri.scheme() == Some("http") { | ||||
|                                     req.set_proxy(true); | ||||
|                                 } | ||||
|                             if let Some(headers) = self.client.proxy.http_headers(&uri) { | ||||
|                                 req.set_proxy(true); | ||||
|                                 req.headers_mut().extend(headers.iter()); | ||||
|                             } | ||||
|                             self.in_flight = self.client.hyper.request(req); | ||||
|                             continue; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user