diff --git a/cli/http_util.rs b/cli/http_util.rs index ec035d6bf6..6411a9ad63 100644 --- a/cli/http_util.rs +++ b/cli/http_util.rs @@ -1,11 +1,14 @@ // Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. use crate::deno_error; use crate::deno_error::DenoError; +use crate::version; use deno::ErrBox; use futures::{future, Future}; use reqwest; +use reqwest::header::HeaderMap; use reqwest::header::CONTENT_TYPE; use reqwest::header::LOCATION; +use reqwest::header::USER_AGENT; use reqwest::r#async::Client; use reqwest::RedirectPolicy; use url::Url; @@ -13,8 +16,14 @@ use url::Url; /// Create new instance of async reqwest::Client. This client supports /// proxies and doesn't follow redirects. pub fn get_client() -> Client { + let mut headers = HeaderMap::new(); + headers.insert( + USER_AGENT, + format!("Deno/{}", version::DENO).parse().unwrap(), + ); Client::builder() .redirect(RedirectPolicy::none()) + .default_headers(headers) .use_sys_proxy() .build() .unwrap() diff --git a/js/fetch_test.ts b/js/fetch_test.ts index 083d5333c3..77cc010a8d 100644 --- a/js/fetch_test.ts +++ b/js/fetch_test.ts @@ -220,6 +220,16 @@ testPerm({ net: true }, async function fetchInitBlobBody(): Promise { assert(response.headers.get("content-type").startsWith("text/javascript")); }); +testPerm({ net: true }, async function fetchUserAgent(): Promise { + const data = "Hello World"; + const response = await fetch("http://localhost:4545/echo_server", { + method: "POST", + body: new TextEncoder().encode(data) + }); + assertEquals(response.headers.get("user-agent"), `Deno/${Deno.version.deno}`); + await response.text(); +}); + // TODO(ry) The following tests work but are flaky. There's a race condition // somewhere. Here is what one of these flaky failures looks like: // diff --git a/tools/http_server.py b/tools/http_server.py index dc3bbe00be..1951c9e531 100755 --- a/tools/http_server.py +++ b/tools/http_server.py @@ -61,6 +61,9 @@ class ContentTypeHandler(QuietSimpleHTTPRequestHandler): if self.headers.has_key('content-type'): self.send_header('content-type', self.headers.getheader('content-type')) + if self.headers.has_key('user-agent'): + self.send_header('user-agent', + self.headers.getheader('user-agent')) self.end_headers() data_string = self.rfile.read(int(self.headers['Content-Length'])) self.wfile.write(bytes(data_string))