From: Flavio Garcia Date: Sun, 26 Apr 2020 20:18:26 +0000 (-0400) Subject: Added default User-Agent to the simple http client if not provided. X-Git-Tag: v6.1.0b1~31 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c3c263de0a7b627af4ea3b729a32acd2ddd99d38;p=thirdparty%2Ftornado.git Added default User-Agent to the simple http client if not provided. The User-Agent format is "Tornado\{Tornado_Version}". If self.request.user_agent isn't set and self.request.headers has no User-Agent in it's keys the default User-Agent is added. Fixes: #2702 --- diff --git a/tornado/simple_httpclient.py b/tornado/simple_httpclient.py index 1e0578651..ec1b84fda 100644 --- a/tornado/simple_httpclient.py +++ b/tornado/simple_httpclient.py @@ -1,5 +1,5 @@ from tornado.escape import _unicode -from tornado import gen +from tornado import gen, version from tornado.httpclient import ( HTTPResponse, HTTPError, @@ -392,6 +392,8 @@ class _HTTPConnection(httputil.HTTPMessageDelegate): ) if self.request.user_agent: self.request.headers["User-Agent"] = self.request.user_agent + elif self.request.headers.get("User-Agent") is None: + self.request.headers["User-Agent"] = "Tornado/{}".format(version) if not self.request.allow_nonstandard_methods: # Some HTTP methods nearly always have bodies while others # almost never do. Fail in this case unless the user has diff --git a/tornado/test/simple_httpclient_test.py b/tornado/test/simple_httpclient_test.py index 0f2c252fe..18e096911 100644 --- a/tornado/test/simple_httpclient_test.py +++ b/tornado/test/simple_httpclient_test.py @@ -10,7 +10,7 @@ import sys import typing # noqa: F401 from tornado.escape import to_unicode, utf8 -from tornado import gen +from tornado import gen, version from tornado.httpclient import AsyncHTTPClient from tornado.httputil import HTTPHeaders, ResponseStartLine from tornado.ioloop import IOLoop @@ -28,6 +28,7 @@ from tornado.test.httpclient_test import ( CountdownHandler, HelloWorldHandler, RedirectHandler, + UserAgentHandler, ) from tornado.test import httpclient_test from tornado.testing import ( @@ -171,6 +172,7 @@ class SimpleHTTPClientTestMixin(object): url("/echo_post", EchoPostHandler), url("/respond_in_prepare", RespondInPrepareHandler), url("/redirect", RedirectHandler), + url("/user_agent", UserAgentHandler), ], gzip=True, ) @@ -246,6 +248,11 @@ class SimpleHTTPClientTestMixin(object): self.fetch("/hello", headers=headers) self.assertEqual(list(headers.get_all()), [("User-Agent", "Foo")]) + def test_default_user_agent(self: typing.Any): + response = self.fetch("/user_agent", method="GET") + self.assertEqual(200, response.code) + self.assertEqual(response.body.decode(), "Tornado/{}".format(version)) + def test_see_other_redirect(self: typing.Any): for code in (302, 303): response = self.fetch("/see_other_post", method="POST", body="%d" % code)