如何在Python中发出http请求时转义代理密码字符串中的@字符

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

如何转义代理密码中的

@
字符。下面是我的代理字符串的样子,我正在使用 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.

任何对此的帮助将不胜感激:)

python-3.x proxy python-requests basic-authentication http-proxy
1个回答
0
投票

尝试使用 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)
© www.soinside.com 2019 - 2024. All rights reserved.