diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2019-09-11 13:31:00 +0200 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2019-09-11 07:31:00 -0400 |
commit | 85c51404aed21813df34c518a00c52a564d6fc69 (patch) | |
tree | a03c1aa4bc8a5a6fb17e222e1ea22ed2214c7792 | |
parent | a4e1d7d2e750831a1891b9267c8585a3e90083af (diff) |
feat: Set user agent for http client (#2916)
-rw-r--r-- | cli/http_util.rs | 9 | ||||
-rw-r--r-- | js/fetch_test.ts | 10 | ||||
-rwxr-xr-x | tools/http_server.py | 3 |
3 files changed, 22 insertions, 0 deletions
diff --git a/cli/http_util.rs b/cli/http_util.rs index ec035d6bf..6411a9ad6 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 083d5333c..77cc010a8 100644 --- a/js/fetch_test.ts +++ b/js/fetch_test.ts @@ -220,6 +220,16 @@ testPerm({ net: true }, async function fetchInitBlobBody(): Promise<void> { assert(response.headers.get("content-type").startsWith("text/javascript")); }); +testPerm({ net: true }, async function fetchUserAgent(): Promise<void> { + 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 dc3bbe00b..1951c9e53 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)) |