set user-agent header
Change-Id: Ia67807667b4b5177d83cce9fcf16d98dc5024fbc
This commit is contained in:
parent
cdf6f84c36
commit
4f3d6e7f3a
@ -29,6 +29,7 @@ from urllib import quote as _quote
|
|||||||
from urlparse import urlparse, urlunparse
|
from urlparse import urlparse, urlunparse
|
||||||
from time import sleep, time
|
from time import sleep, time
|
||||||
|
|
||||||
|
from swiftclient import version as swiftclient_version
|
||||||
from swiftclient.exceptions import ClientException, InvalidHeadersException
|
from swiftclient.exceptions import ClientException, InvalidHeadersException
|
||||||
from swiftclient.utils import LengthWrapper
|
from swiftclient.utils import LengthWrapper
|
||||||
|
|
||||||
@ -133,7 +134,7 @@ except ImportError:
|
|||||||
|
|
||||||
class HTTPConnection:
|
class HTTPConnection:
|
||||||
def __init__(self, url, proxy=None, cacert=None, insecure=False,
|
def __init__(self, url, proxy=None, cacert=None, insecure=False,
|
||||||
ssl_compression=False):
|
ssl_compression=False, default_user_agent=None):
|
||||||
"""
|
"""
|
||||||
Make an HTTPConnection or HTTPSConnection
|
Make an HTTPConnection or HTTPSConnection
|
||||||
|
|
||||||
@ -147,6 +148,12 @@ class HTTPConnection:
|
|||||||
:param ssl_compression: SSL compression should be disabled by default
|
:param ssl_compression: SSL compression should be disabled by default
|
||||||
and this setting is not usable as of now. The
|
and this setting is not usable as of now. The
|
||||||
parameter is kept for backward compatibility.
|
parameter is kept for backward compatibility.
|
||||||
|
:param default_user_agent: Set the User-Agent header on every request.
|
||||||
|
If set to None (default), the user agent
|
||||||
|
will be "python-swiftclient-<version>". This
|
||||||
|
may be overridden on a per-request basis by
|
||||||
|
explicitly setting the user-agent header on
|
||||||
|
a call to request().
|
||||||
:raises ClientException: Unable to handle protocol scheme
|
:raises ClientException: Unable to handle protocol scheme
|
||||||
"""
|
"""
|
||||||
self.url = url
|
self.url = url
|
||||||
@ -171,6 +178,10 @@ class HTTPConnection:
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
self.requests_args['stream'] = True
|
self.requests_args['stream'] = True
|
||||||
|
if default_user_agent is None:
|
||||||
|
default_user_agent = \
|
||||||
|
'python-swiftclient-%s' % swiftclient_version.version_string
|
||||||
|
self.default_user_agent = default_user_agent
|
||||||
|
|
||||||
def _request(self, *arg, **kwarg):
|
def _request(self, *arg, **kwarg):
|
||||||
""" Final wrapper before requests call, to be patched in tests """
|
""" Final wrapper before requests call, to be patched in tests """
|
||||||
@ -178,8 +189,11 @@ class HTTPConnection:
|
|||||||
|
|
||||||
def request(self, method, full_path, data=None, headers={}, files=None):
|
def request(self, method, full_path, data=None, headers={}, files=None):
|
||||||
""" Encode url and header, then call requests.request """
|
""" Encode url and header, then call requests.request """
|
||||||
headers = dict((encode_utf8(x), encode_utf8(y)) for x, y in
|
headers = dict((encode_utf8(x.lower()), encode_utf8(y)) for x, y in
|
||||||
headers.items())
|
headers.items())
|
||||||
|
# set a default User-Agent header if it wasn't passed in
|
||||||
|
if 'user-agent' not in headers:
|
||||||
|
headers['user-agent'] = self.default_user_agent
|
||||||
url = encode_utf8("%s://%s%s" % (
|
url = encode_utf8("%s://%s%s" % (
|
||||||
self.parsed_url.scheme,
|
self.parsed_url.scheme,
|
||||||
self.parsed_url.netloc,
|
self.parsed_url.netloc,
|
||||||
|
@ -191,6 +191,48 @@ class TestHttpHelpers(MockHttpTest):
|
|||||||
url = 'ftp://www.test.com'
|
url = 'ftp://www.test.com'
|
||||||
self.assertRaises(c.ClientException, c.http_connection, url)
|
self.assertRaises(c.ClientException, c.http_connection, url)
|
||||||
|
|
||||||
|
def test_set_user_agent_default(self):
|
||||||
|
_junk, conn = c.http_connection('http://www.example.com')
|
||||||
|
req_headers = {}
|
||||||
|
|
||||||
|
def my_request_handler(*a, **kw):
|
||||||
|
req_headers.update(kw.get('headers', {}))
|
||||||
|
conn._request = my_request_handler
|
||||||
|
|
||||||
|
# test the default
|
||||||
|
conn.request('GET', '/')
|
||||||
|
ua = req_headers.get('user-agent', 'XXX-MISSING-XXX')
|
||||||
|
self.assert_(ua.startswith('python-swiftclient-'))
|
||||||
|
|
||||||
|
def test_set_user_agent_per_request_override(self):
|
||||||
|
_junk, conn = c.http_connection('http://www.example.com')
|
||||||
|
req_headers = {}
|
||||||
|
|
||||||
|
def my_request_handler(*a, **kw):
|
||||||
|
req_headers.update(kw.get('headers', {}))
|
||||||
|
conn._request = my_request_handler
|
||||||
|
|
||||||
|
# test if it's actually set
|
||||||
|
conn.request('GET', '/', headers={'User-Agent': 'Me'})
|
||||||
|
ua = req_headers.get('user-agent', 'XXX-MISSING-XXX')
|
||||||
|
self.assertEqual(ua, 'Me', req_headers)
|
||||||
|
|
||||||
|
def test_set_user_agent_default_override(self):
|
||||||
|
_junk, conn = c.http_connection(
|
||||||
|
'http://www.example.com',
|
||||||
|
default_user_agent='a-new-default')
|
||||||
|
req_headers = {}
|
||||||
|
|
||||||
|
def my_request_handler(*a, **kw):
|
||||||
|
req_headers.update(kw.get('headers', {}))
|
||||||
|
conn._request = my_request_handler
|
||||||
|
|
||||||
|
# test setting a default
|
||||||
|
conn._request = my_request_handler
|
||||||
|
conn.request('GET', '/')
|
||||||
|
ua = req_headers.get('user-agent', 'XXX-MISSING-XXX')
|
||||||
|
self.assertEqual(ua, 'a-new-default')
|
||||||
|
|
||||||
def test_validate_headers(self):
|
def test_validate_headers(self):
|
||||||
headers = {'key': 'value'}
|
headers = {'key': 'value'}
|
||||||
self.assertEqual(c.validate_headers(headers), None)
|
self.assertEqual(c.validate_headers(headers), None)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user