Python 请求包中的 URI 编码

问题描述 投票:0回答:2

我正在使用 python 请求包从 API 获取结果,URL 中包含 + 符号。但是当我使用 requests.get 时,请求失败了,因为 API 无法理解 + 符号。如果我用 %2B(URI 编码)替换 + 符号,请求是如何成功的。

有没有办法对这些字符进行编码,以便我在将 URL 传递给请求包时对其进行编码

Error: test [email protected] does not exist
API : https://example.com/[email protected]
python python-requests urlencode
2个回答
68
投票

您可以使用

requests.utils.quote
(这只是链接
urllib.parse.quote
)将您的文本转换为url编码格式。

>>> import requests
>>> requests.utils.quote('[email protected]')
'test%2Buser%40gmail.com'

1
投票

在 Python 3+ 中,可以使用

urllib.parse.quote()
对任何字符串进行 URL 编码(或者,您可以使用
requests.utils.quote()
,它本质上使用来自
quote()
模块的相同
urllib.parse
函数)。此函数用于引用 URL 的路径部分,而不是整个 URL。它基本上会使用
%xx
转义替换字符串中的任何特殊字符。在 Python 2.x 中,
quote()
函数可以直接从
urllib
包访问,即
urllib.quote()
.

注意

quote()
函数默认考虑
/
字符safe。因此,如果您将另一个 URL 传递给该 URL 的路径部分(或查询字符串)并且还想对
/
字符进行编码,您可以通过将
safe
参数设置为
''
来实现,即,一个空字符串。

例子

import requests
from urllib.parse import quote 

base_url = 'https://example.com/'
path_param = 'https://raw.githubusercontent.com/ultralytics/yolov5/master/data/images/zidane.jpg'
url = base_url + quote(path_param, safe='')
r = requests.get(url)
print(r.request.url)
© www.soinside.com 2019 - 2024. All rights reserved.