Fix issue14826 - make urllib.request.Request quoted url consistent with URLOpener open method.

Patch contributed by Stephen Thorne.
This commit is contained in:
Senthil Kumaran 2012-07-07 17:37:53 -07:00
parent 5356af8c48
commit 01fe5fa8ea
3 changed files with 14 additions and 2 deletions

View file

@ -1325,6 +1325,12 @@ class RequestTests(unittest.TestCase):
req = Request("<URL:http://www.python.org>") req = Request("<URL:http://www.python.org>")
self.assertEqual("www.python.org", req.get_host()) 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): def test_url_fragment(self):
req = Request("http://www.python.org/?qs=query#fragment=true") req = Request("http://www.python.org/?qs=query#fragment=true")
self.assertEqual("/?qs=query", req.get_selector()) self.assertEqual("/?qs=query", req.get_selector())

View file

@ -110,7 +110,7 @@ except ImportError:
from StringIO import StringIO from StringIO import StringIO
from urllib import (unwrap, unquote, splittype, splithost, quote, from urllib import (unwrap, unquote, splittype, splithost, quote,
addinfourl, splitport, splittag, addinfourl, splitport, splittag, toBytes,
splitattr, ftpwrapper, splituser, splitpasswd, splitvalue) splitattr, ftpwrapper, splituser, splitpasswd, splitvalue)
# support for FileHandler, proxies via environment variables # support for FileHandler, proxies via environment variables
@ -196,7 +196,8 @@ class Request:
def __init__(self, url, data=None, headers={}, def __init__(self, url, data=None, headers={},
origin_req_host=None, unverifiable=False): origin_req_host=None, unverifiable=False):
# unwrap('<URL:type://host/path>') --> 'type://host/path' # 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.__original, self.__fragment = splittag(self.__original)
self.type = None self.type = None
# self.__r_type is what's left after doing the splittype # self.__r_type is what's left after doing the splittype

View file

@ -84,6 +84,11 @@ Core and Builtins
Library 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 - Issue #15247: FileIO now raises an error when given a file descriptor
pointing to a directory. pointing to a directory.