如何使用Python将自定义参数添加到URL查询字符串?

时间:2010-11-27 19:26:39

标签: python

我需要使用Python

将自定义参数添加到URL查询字符串

实施例: 这是浏览器提取的URL(GET):

/scr.cgi?q=1&ln=0

然后执行一些python命令,因此我需要在浏览器中设置以下URL:

/scr.cgi?q=1&ln=0&SOMESTRING=1

有一些标准方法吗?

4 个答案:

答案 0 :(得分:68)

您可以使用urlsplit()urlunsplit()拆分并重建网址,然后在解析后的查询字符串上使用urlencode()

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))

按如下方式使用:

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

答案 1 :(得分:9)

使用urlsplit()提取查询字符串,parse_qsl()解析它(如果不关心参数顺序,则为parse_qs()),添加新参数{{3} }将其重新转换为查询字符串,urlencode()将其融合回单个URL,然后重定向客户端。

答案 2 :(得分:1)

您可以使用python的url操作库 furl

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

答案 3 :(得分: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