From 248d3e9f0f8ea1657d9329f8b188a81ca2a65ecc Mon Sep 17 00:00:00 2001 From: Hussain Date: Wed, 16 Nov 2016 22:48:45 +0530 Subject: [PATCH] Fixed issue #3696. Added a test for it as well. --- requests/models.py | 3 +++ tests/test_requests.py | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/requests/models.py b/requests/models.py index a4bd41b1..b3502674 100644 --- a/requests/models.py +++ b/requests/models.py @@ -343,6 +343,9 @@ class PreparedRequest(RequestEncodingMixin, RequestHooksMixin): else: url = unicode(url) if is_py2 else str(url) + # Remove leading and trailing whitespaces from url + url = url.strip() + # Don't do any URL preparation for non-HTTP schemes like `mailto`, # `data` etc to work around exceptions from `url_parse`, which # handles RFC 3986 only. diff --git a/tests/test_requests.py b/tests/test_requests.py index b2ea76b8..eed80993 100755 --- a/tests/test_requests.py +++ b/tests/test_requests.py @@ -140,6 +140,11 @@ class TestRequests: data=u"ööö".encode("utf-8")).prepare() assert isinstance(request.body, bytes) + def test_whitespaces_are_removed_from_url(self): + # Test for issue #3696 + request = requests.Request('GET', ' http://example.com ').prepare() + assert request.url == 'http://example.com/' + @pytest.mark.parametrize('scheme', ('http://', 'HTTP://', 'hTTp://', 'HttP://')) def test_mixed_case_scheme_acceptable(self, httpbin, scheme): s = requests.Session()