feat(client): add Request.set_proxy for HTTP proxy requests
Closes #1056
This commit is contained in:
@@ -16,6 +16,7 @@ pub struct Request<B = Body> {
|
||||
version: HttpVersion,
|
||||
headers: Headers,
|
||||
body: Option<B>,
|
||||
is_proxy: bool,
|
||||
}
|
||||
|
||||
impl<B> Request<B> {
|
||||
@@ -28,6 +29,7 @@ impl<B> Request<B> {
|
||||
version: HttpVersion::default(),
|
||||
headers: Headers::new(),
|
||||
body: None,
|
||||
is_proxy: false,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -66,6 +68,13 @@ impl<B> Request<B> {
|
||||
/// Set the body of the request.
|
||||
#[inline]
|
||||
pub fn set_body<T: Into<B>>(&mut self, body: T) { self.body = Some(body.into()); }
|
||||
|
||||
/// Set that the URI should use the absolute form.
|
||||
///
|
||||
/// This is only needed when talking to HTTP/1 proxies to URLs not
|
||||
/// protected by TLS.
|
||||
#[inline]
|
||||
pub fn set_proxy(&mut self, is_proxy: bool) { self.is_proxy = is_proxy; }
|
||||
}
|
||||
|
||||
impl<B> fmt::Debug for Request<B> {
|
||||
@@ -80,7 +89,11 @@ impl<B> fmt::Debug for Request<B> {
|
||||
}
|
||||
|
||||
pub fn split<B>(req: Request<B>) -> (RequestHead, Option<B>) {
|
||||
let uri = Uri::from_str(&req.url[::url::Position::BeforePath..::url::Position::AfterQuery]).expect("url is uri");
|
||||
let uri = if req.is_proxy {
|
||||
Uri::from(req.url)
|
||||
} else {
|
||||
Uri::from_str(&req.url[::url::Position::BeforePath..::url::Position::AfterQuery]).expect("url is not uri")
|
||||
};
|
||||
let head = RequestHead {
|
||||
subject: ::http::RequestLine(req.method, uri),
|
||||
headers: req.headers,
|
||||
|
||||
Reference in New Issue
Block a user