Ubuntu下Python3.10用requests库GET请求遇ProxyError问题求助
错误信息
requests.exceptions.ProxyError: HTTPSConnectionPool(host='XXX', port=443): Max retries exceeded with url: XXX (Caused by ProxyError('Cannot connect to proxy.', OSError('Tunnel connection failed: 503 Service Unavailable')))
问题本质
这个503错误是代理服务器返回服务不可用,说明请求在连接代理环节就失败,与目标服务器无关。无论通过环境变量还是手动传proxies参数,核心问题都是代理本身不可用或配置有误。
排查与解决步骤
1. 验证代理本身可用性
先脱离Python,直接用curl测试代理是否能正常工作:
curl -x http://your-proxy-host:port https://目标URL
- 如果
curl也返回503,说明代理服务本身故障(如过期、IP被封禁、服务停止),联系代理运维或提供商解决。 - 如果
curl能正常获取响应,再排查Python/requests的配置问题。
2. 检查代理配置细节
环境变量配置:确保同时设置
HTTP_PROXY和HTTPS_PROXY(HTTPS请求默认依赖HTTPS_PROXY,部分场景仅设HTTP_PROXY会失效),格式要正确:export HTTP_PROXY=http://username:password@proxy-host:port export HTTPS_PROXY=http://username:password@proxy-host:port修改
.bashrc后需执行source ~/.bashrc让配置生效。手动传
proxies参数:需同时指定http和https键,且HTTPS代理的URL前缀是http://(因为是建立HTTP隧道):proxies = { 'http': 'http://proxy-host:port', 'https': 'http://proxy-host:port' } response = requests.get(目标URL, proxies=proxies)若代理需要认证,可直接把用户名密码嵌入URL,或使用
HTTPProxyAuth:from requests.auth import HTTPProxyAuth proxies = {'https': 'http://proxy-host:port'} auth = HTTPProxyAuth('username', 'password') response = requests.get(目标URL, proxies=proxies, auth=auth)
3. 排除环境变量未生效或缓存问题
- 在Python中打印环境变量,确认配置已加载:
import os print(os.getenv('HTTP_PROXY'), os.getenv('HTTPS_PROXY')) - 尝试禁用代理直接请求,验证目标服务器是否可达:
若此请求成功,进一步确认是代理的问题。response = requests.get(目标URL, proxies={'http': None, 'https': None})
4. 检查代理SSL证书(针对HTTPS代理)
如果代理使用自定义SSL证书,需在请求中指定证书路径:
response = requests.get(目标URL, proxies=proxies, verify='/path/to/proxy-ca.crt')
临时测试可关闭证书验证(生产环境禁止使用):
response = requests.get(目标URL, proxies=proxies, verify=False)
内容的提问来源于stack exchange,提问作者Santiago Jimenez
相关产品推荐
相关产品推荐

