python - 如何在Python中注入(inject)URL查询字符串参数?

标签 python query-string

我想为我的组织网站的任何 URL 编写等效的调试 URL。我有Python函数来做到这一点:

import urlparse
import urllib

def compose_debug_url(input_url):
    input_url_parts = urlparse.urlsplit(input_url)
    input_query = input_url_parts.query
    input_query_dict = urlparse.parse_qs(input_query)

    modified_query_dict = dict(input_query_dict.items() + [('debug', 'sp')])
    modified_query = urllib.urlencode(modified_query_dict)
    modified_url_parts = (
      input_url_parts.scheme,
      input_url_parts.netloc,
      input_url_parts.path,
      modified_query,
      input_url_parts.fragment
    )

    modified_url = urlparse.urlunsplit(modified_url_parts)

    return modified_url



print compose_debug_url('http://www.example.com/content/page?name=john&age=35')
print compose_debug_url('http://www.example.com/')

如果运行上面的代码,您应该看到输出:

http://www.example.com/content/page?debug=sp&age=%5B%2735%27%5D&name=%5B%27john%27%5D
http://www.example.com/?debug=sp

相反,我期望:

http://www.example.com/content/page?debug=sp&age=35&name=john
http://www.example.com/?debug=sp

这是因为 urlparse.parse_qs 返回一个字符串字典到列表,而不是一个字符串字典到字符串。

是否有另一种方法可以在 Python 中更简单地执行此操作?

最佳答案

urlparse.parse_qs 返回每个键的值列表。在你的例子中是 {'age': ['35'], 'name': ['john']},而你想要的是 {'age': '35', 'name': '约翰'}

由于您使用键、值解析作为列表,因此请使用 urlparse.parse_qsl

modified_query_dict = dict(urlparse.parse_qsl(input_query) + [('debug', 'sp')])

关于python - 如何在Python中注入(inject)URL查询字符串参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10351959/

相关文章:

java - 使用 MapReduce 拆分字符串并重建它

python - While True - 返回到层次结构的顶部

python - 将 msgpack-python 与嵌套的命名元组一起使用

asp.net-mvc-3 - 在 ASP.NET MVC 中编码 returnUrl 查询字符串

javascript - 如何在ajax页面中获取查询字符串或URL?

java - 将所有 `@QueryParam` 映射到 `JSON` 数据结构

java - 在不使用 QueryString 的情况下将变量从一个网站页面传递到另一个网站页面

javascript - Python Websockets 无法通过互联网连接

python - 使用 Django ORM 处理大量大记录

python - pandas 应用函数性能优化