summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSenthil Kumaran <senthil@uthcode.com>2012-07-08 00:37:53 (GMT)
committerSenthil Kumaran <senthil@uthcode.com>2012-07-08 00:37:53 (GMT)
commit01fe5fa8ea52ba49063d20a5044fb84efdbabe48 (patch)
treefcca35aacbafd582deff4c5c019abb3c931d3ff0
parent5356af8c489d6760f4ad7d88f1178d3820d09999 (diff)
downloadcpython-01fe5fa8ea52ba49063d20a5044fb84efdbabe48.zip
cpython-01fe5fa8ea52ba49063d20a5044fb84efdbabe48.tar.gz
cpython-01fe5fa8ea52ba49063d20a5044fb84efdbabe48.tar.bz2
Fix issue14826 - make urllib.request.Request quoted url consistent with URLOpener open method.
Patch contributed by Stephen Thorne.
-rw-r--r--Lib/test/test_urllib2.py6
-rw-r--r--Lib/urllib2.py5
-rw-r--r--Misc/NEWS5
3 files changed, 14 insertions, 2 deletions
diff --git a/Lib/test/test_urllib2.py b/Lib/test/test_urllib2.py
index fc76a6c..dd5ff8d8 100644
--- a/Lib/test/test_urllib2.py
+++ b/Lib/test/test_urllib2.py
@@ -1325,6 +1325,12 @@ class RequestTests(unittest.TestCase):
req = Request("<URL:http://www.python.org>")
self.assertEqual("www.python.org", req.get_host())
+ def test_quoted_full_url(self):
+ Request = urllib2.Request
+ request = Request('http://www.python.org/foo bar')
+ self.assertEqual(request.get_full_url(),
+ 'http://www.python.org/foo%20bar')
+
def test_url_fragment(self):
req = Request("http://www.python.org/?qs=query#fragment=true")
self.assertEqual("/?qs=query", req.get_selector())
diff --git a/Lib/urllib2.py b/Lib/urllib2.py
index d4596cd..944f622 100644
--- a/Lib/urllib2.py
+++ b/Lib/urllib2.py
@@ -110,7 +110,7 @@ except ImportError:
from StringIO import StringIO
from urllib import (unwrap, unquote, splittype, splithost, quote,
- addinfourl, splitport, splittag,
+ addinfourl, splitport, splittag, toBytes,
splitattr, ftpwrapper, splituser, splitpasswd, splitvalue)
# support for FileHandler, proxies via environment variables
@@ -196,7 +196,8 @@ class Request:
def __init__(self, url, data=None, headers={},
origin_req_host=None, unverifiable=False):
# unwrap('<URL:type://host/path>') --> 'type://host/path'
- self.__original = unwrap(url)
+ self.__original = unwrap(toBytes(url))
+ self.__original = quote(self.__original, safe="%/:=&?~#+!$,;'@()*[]|")
self.__original, self.__fragment = splittag(self.__original)
self.type = None
# self.__r_type is what's left after doing the splittype
diff --git a/Misc/NEWS b/Misc/NEWS
index c5e2e92..7e6dadd 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -84,6 +84,11 @@ Core and Builtins
Library
-------
+- Issue #14826: Quote urls in urllib2.Request identically to how they
+ are quoted by urllib.URLopener. Allows urls to spaces in them to work
+ transparently with urllib.request.urlopen(...). Patch contributed by Stephen
+ Thorne.
+
- Issue #15247: FileIO now raises an error when given a file descriptor
pointing to a directory.