You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python Requests中使用含问号的代理密码?

问题解决:含特殊字符的代理凭据导致InvalidURL错误

问题原因

服务凭据的密码中包含?,这是URL的保留特殊字符,直接拼在代理URL里时,会被解析成URL参数的起始标记,导致代理地址格式非法,触发requests.exceptions.InvalidURL错误。环境变量方式同理,未编码的?会破坏URL结构,导致代理未被正确识别。

解决方案

1. 手动URL编码凭据

使用Python内置的urllib.parse.quote()对用户名和密码分别编码,将特殊字符转义为URL安全格式(?会被转成%3F):

from urllib.parse import quote
import requests

# 替换为实际的服务凭据、代理地址和目标API地址
username = "SERVICE_USERNAME"
password = "包含?的密码"
proxy_host = "proxyserver"
proxy_port = "port"
target_url = "你的API地址"

# 编码特殊字符
encoded_user = quote(username)
encoded_pwd = quote(password)

# 构造合法的代理URL
proxy_url = f"http://{encoded_user}:{encoded_pwd}@{proxy_host}:{proxy_port}"
response = requests.get(target_url, proxies={"https": proxy_url})

2. 使用HTTPProxyAuth传递凭据(推荐)

requests支持通过auth参数单独传递代理认证信息,无需拼接在URL中,会自动处理特殊字符编码:

import requests
from requests.auth import HTTPProxyAuth

proxy_url = "http://proxyserver:port"
target_url = "你的API地址"
# 直接传入原始凭据,无需编码
proxy_auth = HTTPProxyAuth("SERVICE_USERNAME", "包含?的密码")
response = requests.get(target_url, proxies={"https": proxy_url}, auth=proxy_auth)

3. 修正环境变量配置

如果要通过HTTPS_PROXY环境变量设置代理,需手动将密码中的?替换为%3F:

# Linux/macOS终端
export HTTPS_PROXY="http://SERVICE_USERNAME:替换?为%3F后的密码@proxyserver:port"

# Windows CMD
set HTTPS_PROXY=http://SERVICE_USERNAME:替换?为%3F后的密码@proxyserver:port

# Windows PowerShell
$env:HTTPS_PROXY = "http://SERVICE_USERNAME:替换?为%3F后的密码@proxyserver:port"

内容的提问来源于stack exchange,提问作者Miloš Uriga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 16:32:32