gpt4 book ai didi

python - 使用 urlencode python 构建查询字符串

转载 作者:太空狗 更新时间:2023-10-29 19:33:23 24 4
gpt4 key购买 nike

我正在尝试构建一个 url,以便我可以使用 urllib 模块向它发送 get 请求。

假设我的 final_url 应该是

url = "www.example.com/find.php?data=http%3A%2F%2Fwww.stackoverflow.com&search=Generate+value"

现在为了实现这一点,我尝试了以下方法:

>>> initial_url = "http://www.stackoverflow.com"
>>> search = "Generate+value"
>>> params = {"data":initial_url,"search":search}
>>> query_string = urllib.urlencode(params)
>>> query_string
'search=Generate%2Bvalue&data=http%3A%2F%2Fwww.stackoverflow.com'

现在,如果您将我的 query_stringfinal_url 的格式进行比较,您可以观察到两件事

1) 参数的顺序颠倒了 data=()&search= 而是 search=()&data=

2) urlencode也对Generate+value中的+进行了编码

我相信第一个变化是由于字典的随机行为。所以,我虽然使用 OrderedDict to reverse the dictionary .因为,我使用的是 python 2.6.5

pip install ordereddict

但是当我尝试时我无法在我的代码中使用它

>>> od = OrderedDict((('a', 'first'), ('b', 'second')))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'OrderedDict' is not defined

所以,我的问题是在 python 2.6.5 中使用 OrderedDict 的正确方法是什么,以及如何让 urlencode 忽略 +Generate+value 中。

此外,这是构建 URL 的正确方法吗。

最佳答案

您不必担心对 + 进行编码,它应该在取消转义 url 后在服务器上恢复。命名参数的顺序也不重要。

考虑到 OrderedDict,它不是 Python 内置的。您应该从 collections 中导入它:

from urllib import urlencode, quote
# from urllib.parse import urlencode # python3
from collections import OrderedDict

initial_url = "http://www.stackoverflow.com"
search = "Generate+value"
query_string = urlencode(OrderedDict(data=initial_url,search=search))
url = 'www.example.com/find.php?' + query_string

如果你的 python 太旧并且模块 collections 中没有 OrderedDict,请使用:

encoded = "&".join( "%s=%s" % (key, quote(parameters[key], safe="+")) 
for key in ordered(parameters.keys()))

无论如何,参数的顺序应该无关紧要。

注意 quotesafe 参数。它可以防止 + 被转义,但这意味着,服务器会将 Generate+value 解释为 Generate value。您可以通过编写 %2B 并将 % 标记为安全字符来手动转义 +:

关于python - 使用 urlencode python 构建查询字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10765705/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com