]> git.ipfire.org Git - thirdparty/tornado.git/commitdiff
Added default User-Agent to the simple http client if not provided.
authorFlavio Garcia <piraz@candango.org>
Sun, 26 Apr 2020 20:18:26 +0000 (16:18 -0400)
committerGitHub <noreply@github.com>
Sun, 26 Apr 2020 20:18:26 +0000 (16:18 -0400)
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
tornado/simple_httpclient.py
tornado/test/simple_httpclient_test.py

index 1e057865102a2ed618e3d9ef3cd0446ad44e371b..ec1b84fda43d8961710519db8cc37334bca72597 100644 (file)
@@ -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
index 0f2c252fe8d75fdd095809a69943b2577e859f75..18e09691143ef44097b057d9f41c0f556d6e3981 100644 (file)
@@ -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)