Skip to content

Commit 9b3f3e4

Browse files
committed
Support bytestring URLs on Python 3.x
1 parent a718a81 commit 9b3f3e4

File tree

3 files changed

+18
-6
lines changed

3 files changed

+18
-6
lines changed

Diff for: AUTHORS.rst

+1
Original file line numberDiff line numberDiff line change
@@ -155,3 +155,4 @@ Patches and Suggestions
155155
- Ben Bass (`@codedstructure <https://github.com/codedstructure>`_)
156156
- Jonathan Wong <[email protected]> (`@ContinuousFunction <https://github.com/ContinuousFunction>`_)
157157
- Martin Jul (`@mjul <https://github.com/mjul>`_)
158+
- Joe Alcorn (`@buttscicles <https://github.com/buttscicles>`_)

Diff for: requests/models.py

+11-6
Original file line numberDiff line numberDiff line change
@@ -326,13 +326,18 @@ def prepare_method(self, method):
326326
def prepare_url(self, url, params):
327327
"""Prepares the given HTTP URL."""
328328
#: Accept objects that have string representations.
329-
try:
329+
#: We're unable to blindy call unicode/str functions
330+
#: as this will include the bytestring indicator (b'')
331+
#: on python 3.x.
332+
#: https://github.com/kennethreitz/requests/pull/2238
333+
if not is_py2:
334+
if isinstance(url, bytes):
335+
# str(url)
336+
url = url.decode('utf8')
337+
else:
338+
url = str(url)
339+
else:
330340
url = unicode(url)
331-
except NameError:
332-
# We're on Python 3.
333-
url = str(url)
334-
except UnicodeDecodeError:
335-
pass
336341

337342
# Don't do any URL preparation for non-HTTP schemes like `mailto`,
338343
# `data` etc to work around exceptions from `url_parse`, which

Diff for: test_requests.py

+6
Original file line numberDiff line numberDiff line change
@@ -591,6 +591,12 @@ def __call__(self, r):
591591
assert resp.json()['headers'][
592592
'Dummy-Auth-Test'] == 'dummy-auth-test-ok'
593593

594+
def test_prepare_request_with_bytestring_url(self):
595+
req = requests.Request('GET', b'https://httpbin.org/')
596+
s = requests.Session()
597+
prep = s.prepare_request(req)
598+
assert prep.url == "https://httpbin.org/"
599+
594600
def test_links(self):
595601
r = requests.Response()
596602
r.headers = {

0 commit comments

Comments
 (0)