2010-11-27 3 views

Antwort

9

Verwenden urlsplit() die Abfragezeichenfolge zu extrahieren, parse_qsl() es zu analysieren (oder parse_qs(), wenn Sie nicht über Argument, um egal), fügen Sie das neue Argument, urlencode(), um sie zurück in ein Abfragezeichenfolge, urlunsplit(), um es wieder in eine einzelne URL zu fusionieren, umleiten Sie dann den Client.

0
import urllib 
url = "/scr.cgi?q=1&ln=0" 
param = urllib.urlencode({'SOME&STRING':1}) 
url = url.endswith('&') and (url + param) or (url + '&' + param) 

the docs

67

können Sie verwenden urlsplit() und urlunsplit() auseinander zu brechen und eine URL wieder aufzubauen, dann urlencode() auf dem analysierten Query-String verwenden:

from urllib import urlencode 
from urlparse import parse_qs, urlsplit, urlunsplit 

def set_query_parameter(url, param_name, param_value): 
    """Given a URL, set or replace a query parameter and return the 
    modified URL. 

    >>> set_query_parameter('http://example.com?foo=bar&biz=baz', 'foo', 'stuff') 
    'http://example.com?foo=stuff&biz=baz' 

    """ 
    scheme, netloc, path, query_string, fragment = urlsplit(url) 
    query_params = parse_qs(query_string) 

    query_params[param_name] = [param_value] 
    new_query_string = urlencode(query_params, doseq=True) 

    return urlunsplit((scheme, netloc, path, new_query_string, fragment)) 

Verwenden Sie es wie folgt:

>>> set_query_parameter("/scr.cgi?q=1&ln=0", "SOMESTRING", 1) 
'/scr.cgi?q=1&ln=0&SOMESTRING=1' 
+0

Ich benutzte es für die Seitenumbruch und es funktionierte wie ein Charme. Vielen Dank! – Jabba

+0

Obwohl dies mehrere Jahre alt ist, habe ich immer noch das Bedürfnis, darauf hinzuweisen, da diese Frage auf der Titelseite der Google-Suche auftaucht: Wenn Sie die Reihenfolge der Parameter interessieren (was ich aufgrund der 'doseq = True 'part), sollten Sie' parse_qsl() 'anstelle von' parse_qs() 'verwenden - der erste gibt eine Liste von Tupeln zurück, während der zweite ein dict zurückgibt, das ** nicht ** garantiert, um die Reihenfolge zu erhalten wenn über iteriert. Dann kann ein Parameter über 'query_params.append ((param_name, param_value))' hinzugefügt werden. – mhouglum

0

Sie Python verwenden können URL-Manipulationsbibliothek furl.

import furl 
f = furl.furl("/scr.cgi?q=1&ln=0") 
f.args['SOMESTRING'] = 1 
print(f.url) 
+0

Es scheint nicht, dass furl ein eingebautes Modul ist, also müsste es zuerst installiert werden. – commadelimited

Verwandte Themen