Skip to content

Commit

Permalink
Add User-Agent header when resolving via urllib (pex-tool#663)
Browse files Browse the repository at this point in the history
At least some Python Index servers return a simple format of packages page, redirecting to / to /+simple/.

So there is a different result between `pex` run using `urllib` and using `requests` - in one case it errors.
  • Loading branch information
AndrewLvov authored and jsirois committed Feb 6, 2019
1 parent 7dabca5 commit fe405f9
Showing 1 changed file with 4 additions and 3 deletions.
7 changes: 4 additions & 3 deletions pex/http.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ class Context(AbstractClass):
"""

DEFAULT_ENCODING = 'iso-8859-1'
USER_AGENT = 'pex/%s' % PEX_VERSION

class Error(Exception):
"""Error base class for Contexts to wrap application-specific exceptions."""
Expand Down Expand Up @@ -135,7 +136,8 @@ class UrllibContext(Context):
"""Default Python standard library Context."""

def open(self, link):
return urllib_request.urlopen(link.url)
request = urllib_request.Request(link.url, headers={'User-Agent': self.USER_AGENT})
return urllib_request.urlopen(request)

def content(self, link):
if link.local:
Expand All @@ -146,7 +148,7 @@ def content(self, link):
return fp.read().decode(encoding, 'replace')

def resolve(self, link):
request = urllib_request.Request(link.url)
request = urllib_request.Request(link.url, headers={'User-Agent': self.USER_AGENT})
request.get_method = lambda: 'HEAD'
with contextlib.closing(urllib_request.urlopen(request)) as response:
return link.wrap(response.url)
Expand Down Expand Up @@ -209,7 +211,6 @@ def close(self):

class RequestsContext(Context):
"""A requests-based Context."""
USER_AGENT = 'pex/%s' % PEX_VERSION

@staticmethod
def _create_session(max_retries):
Expand Down

0 comments on commit fe405f9

Please sign in to comment.