@@ -266,8 +266,7 @@ def __init__(self, method=HTTP_METHOD, url=None, parameters=None):
266
266
267
267
@setter
268
268
def url (self , value ):
269
- parts = urlparse .urlparse (value )
270
- scheme , netloc , path = parts [:3 ]
269
+ scheme , netloc , path , params , query , fragment = urlparse .urlparse (value )
271
270
272
271
# Exclude default port numbers.
273
272
if scheme == 'http' and netloc [- 3 :] == ':80' :
@@ -278,7 +277,7 @@ def url(self, value):
278
277
if scheme != 'http' and scheme != 'https' :
279
278
raise ValueError ("Unsupported URL %s (%s)." % (value , scheme ))
280
279
281
- value = '%s://%s%s' % ( scheme , netloc , path )
280
+ value = urlparse . urlunparse (( scheme , netloc , path , params , query , fragment ) )
282
281
self .__dict__ ['url' ] = value
283
282
284
283
@setter
@@ -316,7 +315,14 @@ def to_postdata(self):
316
315
317
316
def to_url (self ):
318
317
"""Serialize as a URL for a GET request."""
319
- return '%s?%s' % (self .url , self .to_postdata ())
318
+ base_url = urlparse .urlparse (self .url )
319
+ query = urlparse .parse_qs (base_url .query )
320
+ for k , v in self .items ():
321
+ query .setdefault (k , []).append (v )
322
+ url = (base_url .scheme , base_url .netloc , base_url .path , base_url .params ,
323
+ urllib .urlencode (query , True ), base_url .fragment )
324
+ print url
325
+ return urlparse .urlunparse (url )
320
326
321
327
def get_parameter (self , parameter ):
322
328
ret = self .get (parameter )
0 commit comments