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