我正在使用 python 请求包从 API 获取结果,URL 中包含 + 符号。但是当我使用 requests.get 时,请求失败了,因为 API 无法理解 + 符号。如果我用 %2B(URI 编码)替换 + 符号,请求是如何成功的。
有没有办法对这些字符进行编码,以便我在将 URL 传递给请求包时对其进行编码
Error: test user@gmail.com does not exist
API : https://example.com/test+user@gmail.com
您可以使用
requests.utils.quote
(这只是链接到urllib.parse.quote
)将您的文本转换为url编码格式。
>>> import requests
>>> requests.utils.quote('test+user@gmail.com')
'test%2Buser%40gmail.com'
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)