summaryrefslogtreecommitdiff
path: root/cli/ops/fetch.rs
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2019-04-25 19:29:21 +0200
committerBert Belder <bertbelder@gmail.com>2019-08-30 14:49:03 -0700
commit723284fd20bb320fc1c5c1c53d0617c1d4169c25 (patch)
treeb5557bb39ed816d11523a4edb5f1711edc9930c3 /cli/ops/fetch.rs
parent840c4aa2b23cad129a16b9a57eeb9dcb50083c62 (diff)
Use 'reqwest' to implement HTTP client (#2822)
Closes #2720
Diffstat (limited to 'cli/ops/fetch.rs')
-rw-r--r--cli/ops/fetch.rs74
1 files changed, 32 insertions, 42 deletions
diff --git a/cli/ops/fetch.rs b/cli/ops/fetch.rs
index e2ab81a81..afda07f75 100644
--- a/cli/ops/fetch.rs
+++ b/cli/ops/fetch.rs
@@ -1,19 +1,16 @@
// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
use super::dispatch_json::{Deserialize, JsonOp, Value};
-use crate::http_util;
+use crate::http_util::get_client;
use crate::resources;
use crate::state::ThreadSafeState;
use deno::*;
use http::header::HeaderName;
-use http::uri::Uri;
+use http::header::HeaderValue;
use http::Method;
use hyper;
-use hyper::header::HeaderValue;
use hyper::rt::Future;
-use hyper::Request;
use std;
use std::convert::From;
-use std::str::FromStr;
#[derive(Deserialize)]
struct FetchArgs {
@@ -30,53 +27,46 @@ pub fn op_fetch(
let args: FetchArgs = serde_json::from_value(args)?;
let url = args.url;
- let body = match data {
- None => hyper::Body::empty(),
- Some(buf) => hyper::Body::from(Vec::from(&*buf)),
- };
-
- let mut req = Request::new(body);
- let uri = Uri::from_str(&url).map_err(ErrBox::from)?;
- *req.uri_mut() = uri;
+ let client = get_client();
- if let Some(method) = args.method {
- let method = Method::from_str(&method).unwrap();
- *req.method_mut() = method;
- }
-
- let headers = req.headers_mut();
- for header_pair in args.headers {
- let name = HeaderName::from_bytes(header_pair.0.as_bytes()).unwrap();
- let v = HeaderValue::from_str(&header_pair.1).unwrap();
- headers.insert(name, v);
- }
+ let method = match args.method {
+ Some(method_str) => Method::from_bytes(method_str.as_bytes())?,
+ None => Method::GET,
+ };
let url_ = url::Url::parse(&url).map_err(ErrBox::from)?;
state.check_net_url(&url_)?;
- let client = http_util::get_client();
+ let mut request = client.request(method, url_);
+
+ if let Some(buf) = data {
+ request = request.body(Vec::from(&*buf));
+ }
+ for (key, value) in args.headers {
+ let name = HeaderName::from_bytes(key.as_bytes()).unwrap();
+ let v = HeaderValue::from_str(&value).unwrap();
+ request = request.header(name, v);
+ }
debug!("Before fetch {}", url);
- let future = client
- .request(req)
- .map_err(ErrBox::from)
- .and_then(move |res| {
- let status = res.status().as_u16();
- let mut res_headers = Vec::new();
- for (key, val) in res.headers().iter() {
- res_headers.push((key.to_string(), val.to_str().unwrap().to_owned()));
- }
- let body = res.into_body();
- let body_resource = resources::add_hyper_body(body);
+ let future = request.send().map_err(ErrBox::from).and_then(move |res| {
+ let status = res.status().as_u16();
+ let mut res_headers = Vec::new();
+ for (key, val) in res.headers().iter() {
+ res_headers.push((key.to_string(), val.to_str().unwrap().to_owned()));
+ }
- let json_res = json!({
- "bodyRid": body_resource.rid,
- "status": status,
- "headers": res_headers
- });
+ let body = res.into_body();
+ let body_resource = resources::add_reqwest_body(body);
- futures::future::ok(json_res)
+ let json_res = json!({
+ "bodyRid": body_resource.rid,
+ "status": status,
+ "headers": res_headers
});
+ futures::future::ok(json_res)
+ });
+
Ok(JsonOp::Async(Box::new(future)))
}