diff --git a/requests/defaults.py b/requests/defaults.py index 41e279df..87e088b7 100644 --- a/requests/defaults.py +++ b/requests/defaults.py @@ -26,13 +26,12 @@ Configurations: SCHEMAS = ['http', 'https'] -from . import __version__ +from .utils import default_user_agent defaults = dict() - defaults['base_headers'] = { - 'User-Agent': 'python-requests/%s' % __version__, + 'User-Agent': default_user_agent(), 'Accept-Encoding': ', '.join(('identity', 'deflate', 'compress', 'gzip')), 'Accept': '*/*' } @@ -49,5 +48,3 @@ defaults['keep_alive'] = True defaults['encode_uri'] = True defaults['trust_env'] = True defaults['store_cookies'] = True - - diff --git a/requests/utils.py b/requests/utils.py index 926b6f29..730b2f3a 100644 --- a/requests/utils.py +++ b/requests/utils.py @@ -12,10 +12,13 @@ that are also useful for external consumption. import cgi import codecs import os +import platform import re +import sys import zlib from netrc import netrc, NetrcParseError +from . import __version__ from .compat import parse_http_list as _parse_list_header from .compat import quote, urlparse, basestring, bytes, str from .cookies import RequestsCookieJar, cookiejar_from_dict @@ -457,3 +460,31 @@ def get_environ_proxies(): get_proxy = lambda k: os.environ.get(k) or os.environ.get(k.upper()) proxies = [(key, get_proxy(key + '_proxy')) for key in proxy_keys] return dict([(key, val) for (key, val) in proxies if val]) + + +def default_user_agent(): + """Return a string representing the default user agent.""" + _implementation = platform.python_implementation() + + if _implementation == 'CPython': + _implementation_version = platform.python_version() + elif _implementation == 'PyPy': + _implementation_version = '%s.%s.%s' % ( + sys.pypy_version_info.major, + sys.pypy_version_info.minor, + sys.pypy_version_info.micro + ) + if sys.pypy_version_info.releaselevel != 'final': + _implementation_version = ''.join([_implementation_version, sys.pypy_version_info.releaselevel]) + elif _implementation == 'Jython': + _implementation_version = platform.python_version() # Complete Guess + elif _implementation == 'IronPython': + _implementation_version = platform.python_version() # Complete Guess + else: + _implementation_version = 'Unknown' + + return " ".join([ + 'python-requests/%s' % __version__, + '%s/%s' % (_implementation, _implementation_version), + '%s/%s' % (platform.system(), platform.release()), + ])