Skip to content

Commit d69f592

Browse files
committed
Update to reqwest 0.10
Fixes #79.
1 parent 6b3cd7f commit d69f592

File tree

3 files changed

+70
-15
lines changed

3 files changed

+70
-15
lines changed

Cargo.toml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ default = ["reqwest-09"]
1919
futures-01 = ["futures-0-1"]
2020
futures-03 = ["futures-0-3", "async-trait"]
2121
reqwest-09 = ["reqwest-0-9"]
22-
reqwest-010 = ["reqwest-0-10"]
22+
reqwest-010 = ["reqwest-0-10", "http-0-2"]
2323

2424
[dependencies]
2525
async-trait = { version = "0.1", optional = true }
@@ -30,9 +30,10 @@ failure_derive = "0.1"
3030
futures-0-1 = { version = "0.1", optional = true, package = "futures" }
3131
futures-0-3 = { version = "0.3", optional = true, package = "futures" }
3232
http = "0.1"
33+
http-0-2 = { version = "0.2", optional = true, package = "http" }
3334
rand = "0.6"
3435
reqwest-0-9 = { version = "0.9", optional = true, package = "reqwest" }
35-
reqwest-0-10 = { version = "=0.10.0-alpha.2", optional = true, features = ["blocking"], package = "reqwest" }
36+
reqwest-0-10 = { version = "0.10", optional = true, features = ["blocking"], package = "reqwest" }
3637
serde = { version = "1.0", features = ["derive"] }
3738
serde_json = "1.0"
3839
sha2 = "0.7"

src/reqwest/async_client.rs

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
use super::super::{HttpRequest, HttpResponse};
22
use super::Error;
33

4+
use http::header::HeaderName;
5+
use http::{HeaderMap, HeaderValue, StatusCode};
6+
47
pub use reqwest_0_10 as reqwest;
58

69
///
@@ -11,26 +14,41 @@ pub async fn async_http_client(
1114
) -> Result<HttpResponse, Error<reqwest::Error>> {
1215
let client = reqwest::Client::builder()
1316
// Following redirects opens the client up to SSRF vulnerabilities.
14-
.redirect(reqwest::RedirectPolicy::none())
17+
.redirect(reqwest::redirect::Policy::none())
1518
.build()
1619
.map_err(Error::Reqwest)?;
1720

1821
let mut request_builder = client
19-
.request(request.method, request.url.as_str())
22+
.request(
23+
http_0_2::Method::from_bytes(request.method.as_str().as_ref())
24+
.expect("failed to convert Method from http 0.2 to 0.1"),
25+
request.url.as_str(),
26+
)
2027
.body(request.body);
2128
for (name, value) in &request.headers {
22-
request_builder = request_builder.header(name, value);
29+
request_builder = request_builder.header(name.as_str(), value.as_bytes());
2330
}
2431
let request = request_builder.build().map_err(Error::Reqwest)?;
2532

2633
let response = client.execute(request).await.map_err(Error::Reqwest)?;
2734

2835
let status_code = response.status();
29-
let headers = response.headers().clone();
36+
let headers = response
37+
.headers()
38+
.iter()
39+
.map(|(name, value)| {
40+
(
41+
HeaderName::from_bytes(name.as_str().as_ref())
42+
.expect("failed to convert HeaderName from http 0.2 to 0.1"),
43+
HeaderValue::from_bytes(value.as_bytes())
44+
.expect("failed to convert HeaderValue from http 0.2 to 0.1"),
45+
)
46+
})
47+
.collect::<HeaderMap>();
3048
let chunks = response.bytes().await.map_err(Error::Reqwest)?;
31-
3249
Ok(HttpResponse {
33-
status_code,
50+
status_code: StatusCode::from_u16(status_code.as_u16())
51+
.expect("failed to convert StatusCode from http 0.2 to 0.1"),
3452
headers,
3553
body: chunks.to_vec(),
3654
})

src/reqwest/mod.rs

Lines changed: 43 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ mod blocking {
6363
#[cfg(feature = "reqwest-010")]
6464
use reqwest_0_10::blocking;
6565
#[cfg(feature = "reqwest-010")]
66-
use reqwest_0_10::RedirectPolicy;
66+
use reqwest_0_10::redirect::Policy as RedirectPolicy;
6767

6868
use std::io::Read;
6969

@@ -76,23 +76,59 @@ mod blocking {
7676
.redirect(RedirectPolicy::none())
7777
.build()
7878
.map_err(Error::Reqwest)?;
79+
80+
#[cfg(all(feature = "reqwest-09", not(feature = "reqwest-010")))]
7981
let mut request_builder = client
8082
.request(request.method, request.url.as_str())
8183
.body(request.body);
84+
#[cfg(feature = "reqwest-010")]
85+
let mut request_builder = client
86+
.request(
87+
http_0_2::Method::from_bytes(request.method.as_str().as_ref())
88+
.expect("failed to convert Method from http 0.2 to 0.1"),
89+
request.url.as_str(),
90+
)
91+
.body(request.body);
92+
8293
for (name, value) in &request.headers {
83-
request_builder = request_builder.header(name, value);
94+
request_builder = request_builder.header(name.as_str(), value.as_bytes());
8495
}
8596
let mut response = client
8697
.execute(request_builder.build().map_err(Error::Reqwest)?)
8798
.map_err(Error::Reqwest)?;
8899

89100
let mut body = Vec::new();
90101
response.read_to_end(&mut body).map_err(Error::Io)?;
91-
Ok(HttpResponse {
92-
status_code: response.status(),
93-
headers: response.headers().clone(),
94-
body,
95-
})
102+
103+
#[cfg(all(feature = "reqwest-09", not(feature = "reqwest-010")))]
104+
{
105+
Ok(HttpResponse {
106+
status_code: response.status(),
107+
headers: response.headers().clone(),
108+
body,
109+
})
110+
}
111+
#[cfg(feature = "reqwest-010")]
112+
{
113+
let headers = response
114+
.headers()
115+
.iter()
116+
.map(|(name, value)| {
117+
(
118+
http::header::HeaderName::from_bytes(name.as_str().as_ref())
119+
.expect("failed to convert HeaderName from http 0.2 to 0.1"),
120+
http::HeaderValue::from_bytes(value.as_bytes())
121+
.expect("failed to convert HeaderValue from http 0.2 to 0.1"),
122+
)
123+
})
124+
.collect::<http::HeaderMap>();
125+
Ok(HttpResponse {
126+
status_code: http::StatusCode::from_u16(response.status().as_u16())
127+
.expect("failed to convert StatusCode from http 0.2 to 0.1"),
128+
headers,
129+
body,
130+
})
131+
}
96132
}
97133
}
98134

0 commit comments

Comments
 (0)