如何转义代理密码中的
@
字符。下面是我的代理字符串的样子,我正在使用 python requests 模块来发出 http 请求。
import requests
# Reading from environment though
PROXY_STRING = "http://UserName:Pass@[email protected]:Port_No"
PROXY = {
'https': PROXY_STRING,
'http': PROXY_STRING
}
resp = requests.get(some_url, proxies=PROXY)
当我运行上面的代码时,它返回以下消息:
Please check proxy URL. It is malformed and could be missing the host.
我还尝试使用
@
符号的 URL 编码值,即 %40
,如下所示。PROXY_STRING = "http://UserName:Pass%[email protected]:Port_No"
但它返回以下消息
Failed to parse: http://UserName:Pass%[email protected]:Port_No
那么,如何在代理连接字符串中转义
@
(在我的例子中,它在密码中)。我无法选择更改密码。
我的环境:操作系统 - Windows 8.1 Enterprise,请求 2.22.0,Python 3.6.2
注意:我尝试将环境更新为
Python 3.8
和requests 0.23.0
,但仍然抛出相同的异常 - requests.exceptions.InvalidProxyURL: Please check proxy URL. It is malformed and could be missing the host.
任何对此的帮助将不胜感激:)
尝试使用 urllib.parse.quote_plus 作为密码,但在放入字符串之前必须对其进行编码。
import os
from urllib.parse import quote_plus
import requests
PASSWORD = os.environ["PROXY_PASSWORD"]
PROXY_STRING = f"http://UserName:{quote_plus(PASSWORD)}@X.X.X.X:Port_No"
PROXY = {
'https': PROXY_STRING,
'http': PROXY_STRING
}
resp = requests.get(some_url, proxies=PROXY)