diff --git a/Lib/nturl2path.py b/Lib/nturl2path.py index 1cfe827c6d681d6381885ea07628d5beaea29726..ce9c3d36dba359c722b1a936ed5f396f383e637b 100644 --- a/Lib/nturl2path.py +++ b/Lib/nturl2path.py @@ -56,7 +56,7 @@ def pathname2url(p): drive = urllib.parse.quote(comp[0].upper()) components = comp[1].split('\\') - path = '///' + drive + '|' + path = '///' + drive + ':' for comp in components: if comp: path = path + '/' + urllib.parse.quote(comp) diff --git a/Lib/test/test_urllib.py b/Lib/test/test_urllib.py index d616eb171364f3d7d457057eccc52de1a3164f84..da6bc2d48868667785bddfb5c582e872b80cc643 100644 --- a/Lib/test/test_urllib.py +++ b/Lib/test/test_urllib.py @@ -837,6 +837,18 @@ class Utility_Tests(unittest.TestCase): self.assertEqual(('user', 'a\vb'),urllib.parse.splitpasswd('user:a\vb')) self.assertEqual(('user', 'a:b'),urllib.parse.splitpasswd('user:a:b')) + +class URLopener_Tests(unittest.TestCase): + """Testcase to test the open method of URLopener class.""" + + def test_quoted_open(self): + class DummyURLopener(urllib.request.URLopener): + def open_spam(self, url): + return url + + self.assertEqual(DummyURLopener().open( + 'spam://example/ /'),'//example/%20/') + # Just commented them out. # Can't really tell why keep failing in windows and sparc. # Everywhere else they work ok, but on those machines, someteimes @@ -928,6 +940,7 @@ def test_main(): urlencode_Tests, Pathname_Tests, Utility_Tests, + URLopener_Tests, #FTPWrapperTests, ) diff --git a/Lib/urllib/request.py b/Lib/urllib/request.py index 42e6d17206dd398073438047ffa416b371c597c6..89ac22a8f12f95da055879f1ebb274c5257d5d33 100644 --- a/Lib/urllib/request.py +++ b/Lib/urllib/request.py @@ -1398,6 +1398,7 @@ class URLopener: def open(self, fullurl, data=None): """Use URLopener().open(file) instead of open(file, 'r').""" fullurl = unwrap(to_bytes(fullurl)) + fullurl = quote(fullurl, safe="%/:=&?~#+!$,;'@()*[]") if self.tempcache and fullurl in self.tempcache: filename, headers = self.tempcache[fullurl] fp = open(filename, 'rb')