Windows Server域下Python requests通过系统代理联网失败如何解决?
解决Windows Server代理环境下Python requests无法联网的问题
修正代理协议格式
多数HTTP代理同时支持转发HTTPS请求,所以https代理的地址应该用http://前缀,而非https://。如果getproxies()返回的https代理是https://开头,手动修正:proxies = { "http": "http://localaddress:port", "https": "http://localaddress:port" }先通过浏览器或
curl -x http://localaddress:port https://www.google.com确认代理本身能正常连通。适配AD NTLM认证
AD透明授权依赖NTLM认证,requests默认不支持,需安装requests_ntlm库并配置会话:- 安装依赖包:
pip install requests_ntlm - 代码调整(用AD域账号密码):
import requests from requests_ntlm import HttpNtlmAuth from urllib.request import getproxies session = requests.Session() proxies = getproxies() # 替换为你的域账号,格式:域\用户名 session.auth = HttpNtlmAuth('YOUR_DOMAIN\\your_username', 'your_password') session.proxies.update(proxies) # 测试请求(临时关闭证书验证) response = session.get('https://www.google.com/', verify=False) print(response.status_code)
如果不想硬编码密码,可借助
pywin32使用当前Windows登录用户的凭据:pip install pywin32然后修改认证部分:
import win32api session.auth = HttpNtlmAuth('', '', send_cbt=True)- 安装依赖包:
利用环境变量自动加载代理
Windows系统中设置HTTP_PROXY和HTTPS_PROXY环境变量后,requests会自动读取,无需手动传入proxies参数:- 打开「系统属性」→「高级」→「环境变量」,添加:
- 变量名:
HTTP_PROXY,值:http://localaddress:port - 变量名:
HTTPS_PROXY,值:http://localaddress:port
- 变量名:
- 重启Python运行环境,简化代码:
session = requests.Session() response = session.get('https://www.google.com/')
- 打开「系统属性」→「高级」→「环境变量」,添加:
处理SSL证书验证问题
本地网络可能使用自签名证书,导致requests拒绝连接:- 临时关闭验证(仅用于测试):
response = session.get('https://www.google.com/', verify=False) - 导入本地CA证书(生产环境推荐):
response = session.get('https://www.google.com/', verify='path/to/your_ca_cert.pem')
- 临时关闭验证(仅用于测试):
检查代理字典有效性
先打印getproxies()的返回值,确认包含http和https键:from urllib.request import getproxies proxies = getproxies() print(proxies)如果缺少对应键,手动补充完整。
内容的提问来源于stack exchange,提问作者user20033048
相关产品推荐
相关产品推荐

