add proxy authorization
This commit is contained in:
@@ -7,7 +7,7 @@ use futures::{Async, Future, Poll};
|
|||||||
use hyper::client::{Connect, FutureResponse, HttpConnector};
|
use hyper::client::{Connect, FutureResponse, HttpConnector};
|
||||||
use hyper::header::{Headers, Location, Referer, UserAgent, Accept, Encoding,
|
use hyper::header::{Headers, Location, Referer, UserAgent, Accept, Encoding,
|
||||||
AcceptEncoding, Range, qitem};
|
AcceptEncoding, Range, qitem};
|
||||||
use hyper_proxy::Intercept;
|
use hyper_proxy::Proxy as HyperProxy;
|
||||||
use hyper_tls::HttpsConnector;
|
use hyper_tls::HttpsConnector;
|
||||||
use native_tls::{TlsConnector, TlsConnectorBuilder};
|
use native_tls::{TlsConnector, TlsConnectorBuilder};
|
||||||
use tokio_core::reactor::Handle;
|
use tokio_core::reactor::Handle;
|
||||||
@@ -129,8 +129,7 @@ impl ClientBuilder {
|
|||||||
if !config.hostname_verification {
|
if !config.hostname_verification {
|
||||||
https_connector.danger_disable_hostname_verification(true);
|
https_connector.danger_disable_hostname_verification(true);
|
||||||
}
|
}
|
||||||
let intercept = config.proxy.inner.intercept().clone();
|
let mut connector = config.proxy.inner.clone().with_connector(https_connector);
|
||||||
let mut connector = config.proxy.inner.with_connector(https_connector);
|
|
||||||
let tls = try_!(config.tls.build());
|
let tls = try_!(config.tls.build());
|
||||||
connector.set_tls(Some(tls));
|
connector.set_tls(Some(tls));
|
||||||
|
|
||||||
@@ -142,7 +141,7 @@ impl ClientBuilder {
|
|||||||
inner: Arc::new(ClientRef {
|
inner: Arc::new(ClientRef {
|
||||||
gzip: config.gzip,
|
gzip: config.gzip,
|
||||||
hyper: hyper_client,
|
hyper: hyper_client,
|
||||||
intercept: intercept,
|
proxy: config.proxy.inner,
|
||||||
headers: config.headers,
|
headers: config.headers,
|
||||||
redirect_policy: config.redirect_policy,
|
redirect_policy: config.redirect_policy,
|
||||||
referer: config.referer,
|
referer: config.referer,
|
||||||
@@ -415,8 +414,9 @@ impl Client {
|
|||||||
reusable
|
reusable
|
||||||
});
|
});
|
||||||
|
|
||||||
if self.inner.intercept.matches(&uri) && uri.scheme() == Some("http") {
|
if self.inner.proxy.intercept().matches(&uri) && uri.scheme() == Some("http") {
|
||||||
req.set_proxy(true);
|
req.set_proxy(true);
|
||||||
|
req.headers_mut().extend(self.inner.proxy.headers().iter());
|
||||||
}
|
}
|
||||||
let in_flight = self.inner.hyper.request(req);
|
let in_flight = self.inner.hyper.request(req);
|
||||||
|
|
||||||
@@ -457,7 +457,7 @@ impl fmt::Debug for ClientBuilder {
|
|||||||
struct ClientRef {
|
struct ClientRef {
|
||||||
gzip: bool,
|
gzip: bool,
|
||||||
headers: Headers,
|
headers: Headers,
|
||||||
intercept: Intercept,
|
proxy: HyperProxy<()>,
|
||||||
hyper: HyperClient,
|
hyper: HyperClient,
|
||||||
redirect_policy: RedirectPolicy,
|
redirect_policy: RedirectPolicy,
|
||||||
referer: bool,
|
referer: bool,
|
||||||
@@ -556,8 +556,9 @@ impl Future for PendingRequest {
|
|||||||
if let Some(Some(ref body)) = self.body {
|
if let Some(Some(ref body)) = self.body {
|
||||||
req.set_body(body.clone());
|
req.set_body(body.clone());
|
||||||
}
|
}
|
||||||
if self.client.intercept.matches(&uri) && uri.scheme() == Some("http") {
|
if self.client.proxy.intercept().matches(&uri) && uri.scheme() == Some("http") {
|
||||||
req.set_proxy(true);
|
req.set_proxy(true);
|
||||||
|
req.headers_mut().extend(self.client.proxy.headers().iter());
|
||||||
}
|
}
|
||||||
self.in_flight = self.client.hyper.request(req);
|
self.in_flight = self.client.hyper.request(req);
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
17
src/proxy.rs
17
src/proxy.rs
@@ -1,4 +1,6 @@
|
|||||||
|
use std::any::Any;
|
||||||
use hyper::Uri;
|
use hyper::Uri;
|
||||||
|
use hyper::header::{Scheme};
|
||||||
use {IntoUrl};
|
use {IntoUrl};
|
||||||
use hyper_proxy::Intercept;
|
use hyper_proxy::Intercept;
|
||||||
use hyper_proxy::Proxy as HyperProxy;
|
use hyper_proxy::Proxy as HyperProxy;
|
||||||
@@ -14,11 +16,13 @@ use hyper_proxy::Proxy as HyperProxy;
|
|||||||
///
|
///
|
||||||
/// ```rust
|
/// ```rust
|
||||||
/// # fn run() -> Result<(), Box<::std::error::Error>> {
|
/// # fn run() -> Result<(), Box<::std::error::Error>> {
|
||||||
|
/// use reqwest::header::Basic;
|
||||||
|
///
|
||||||
/// let mut proxy = reqwest::Proxy::http("https://secure.example")?;
|
/// let mut proxy = reqwest::Proxy::http("https://secure.example")?;
|
||||||
/// // proxy.set_authorization(Basic {
|
/// proxy.set_authorization(Basic {
|
||||||
/// // username: "John Doe".into(),
|
/// username: "John Doe".into(),
|
||||||
/// // password: Some("Agent1234".into()),
|
/// password: Some("Agent1234".into()),
|
||||||
/// // });
|
/// });
|
||||||
/// # Ok(())
|
/// # Ok(())
|
||||||
/// # }
|
/// # }
|
||||||
/// ```
|
/// ```
|
||||||
@@ -111,6 +115,11 @@ impl Proxy {
|
|||||||
Proxy::new(Intercept::Custom(fun.into()), url)
|
Proxy::new(Intercept::Custom(fun.into()), url)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Set proxy authorization
|
||||||
|
pub fn set_authorization<S: Scheme + Any>(&mut self, scheme: S) {
|
||||||
|
self.inner.set_authorization(scheme);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
pub fn unix<P: AsRef<Path>(path: P) -> Proxy {
|
pub fn unix<P: AsRef<Path>(path: P) -> Proxy {
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
extern crate reqwest;
|
extern crate reqwest;
|
||||||
|
|
||||||
|
use reqwest::header::Bearer;
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
mod support;
|
mod support;
|
||||||
|
|
||||||
@@ -12,6 +14,7 @@ fn test_http_proxy() {
|
|||||||
User-Agent: $USERAGENT\r\n\
|
User-Agent: $USERAGENT\r\n\
|
||||||
Accept: */*\r\n\
|
Accept: */*\r\n\
|
||||||
Accept-Encoding: gzip\r\n\
|
Accept-Encoding: gzip\r\n\
|
||||||
|
Authorization: Bearer MY_SECRET_TOKEN\r\n\
|
||||||
\r\n\
|
\r\n\
|
||||||
",
|
",
|
||||||
response: b"\
|
response: b"\
|
||||||
@@ -23,7 +26,8 @@ fn test_http_proxy() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
let proxy_uri = format!("http://{}", server.addr());
|
let proxy_uri = format!("http://{}", server.addr());
|
||||||
let proxy = reqwest::Proxy::http(&proxy_uri).unwrap();
|
let mut proxy = reqwest::Proxy::http(&proxy_uri).unwrap();
|
||||||
|
proxy.set_authorization(Bearer { token: "MY_SECRET_TOKEN".to_string() });
|
||||||
|
|
||||||
let url = "http://hyper.rs/prox";
|
let url = "http://hyper.rs/prox";
|
||||||
let res = reqwest::Client::builder()
|
let res = reqwest::Client::builder()
|
||||||
|
|||||||
Reference in New Issue
Block a user