40
40
from ._compat import unquote
41
41
from ._compat import unquote_to_bytes
42
42
from ._compat import urlencode
43
+ from ._compat import urlsplit
44
+ from ._compat import urlunsplit
43
45
from ._compat import urlparse
44
46
from ._compat import urlunparse
45
47
from ._version import __version__
@@ -355,12 +357,11 @@ def __init__(self, method=HTTP_METHOD, url=None, parameters=None,
355
357
self .body = body
356
358
self .is_form_encoded = is_form_encoded
357
359
358
-
359
360
@setter
360
361
def url (self , value ):
361
362
self .__dict__ ['url' ] = value
362
363
if value is not None :
363
- scheme , netloc , path , params , query , fragment = urlparse (value )
364
+ scheme , netloc , path , query , fragment = urlsplit (value )
364
365
365
366
# Exclude default port numbers.
366
367
if scheme == 'http' and netloc [- 3 :] == ':80' :
@@ -371,7 +372,7 @@ def url(self, value):
371
372
raise ValueError ("Unsupported URL %s (%s)." % (value , scheme ))
372
373
373
374
# Normalized URL excludes params, query, and fragment.
374
- self .normalized_url = urlunparse ((scheme , netloc , path , None , None , None ))
375
+ self .normalized_url = urlunsplit ((scheme , netloc , path , None , None ))
375
376
else :
376
377
self .normalized_url = None
377
378
self .__dict__ ['url' ] = None
@@ -416,21 +417,26 @@ def to_postdata(self):
416
417
def to_url (self ):
417
418
"""Serialize as a URL for a GET request."""
418
419
base_url = urlparse (self .url )
419
- try :
420
- query = base_url .query
421
- except AttributeError : #pragma NO COVER
422
- # must be python <2.5
423
- query = base_url [4 ]
424
- query = parse_qs (to_utf8 (query ))
425
- for k , v in self .items ():
426
- query .setdefault (to_utf8 (k ), []).append (to_utf8_optional_iterator (v ))
427
-
428
- scheme = to_utf8 (base_url .scheme )
429
- netloc = to_utf8 (base_url .netloc )
430
- path = to_utf8 (base_url .path )
431
- params = to_utf8 (base_url .params )
432
- fragment = to_utf8 (base_url .fragment )
433
-
420
+
421
+ if PY3 :
422
+ query = parse_qs (base_url .query )
423
+ for k , v in self .items ():
424
+ query .setdefault (k , []).append (to_utf8_optional_iterator (v ))
425
+ scheme = base_url .scheme
426
+ netloc = base_url .netloc
427
+ path = base_url .path
428
+ params = base_url .params
429
+ fragment = base_url .fragment
430
+ else :
431
+ query = parse_qs (to_utf8 (base_url .query ))
432
+ for k , v in self .items ():
433
+ query .setdefault (to_utf8 (k ), []).append (to_utf8_optional_iterator (v ))
434
+ scheme = to_utf8 (base_url .scheme )
435
+ netloc = to_utf8 (base_url .netloc )
436
+ path = to_utf8 (base_url .path )
437
+ params = to_utf8 (base_url .params )
438
+ fragment = to_utf8 (base_url .fragment )
439
+
434
440
url = (scheme , netloc , path , params , urlencode (query , True ), fragment )
435
441
return urlunparse (url )
436
442
0 commit comments