Python Requests POST触发HTTPSConnectionPool Max retries exceeded错误求解
问题根因定位
你遇到的Name or service not known错误本质是服务器无法完成目标域名apiv2.drobaio.com的DNS解析,无法拿到对应的IP地址发起请求,本地可正常运行说明域名本身无问题,问题出在服务器的运行环境,常见触发原因如下:
- 服务器DNS配置异常:服务器配置的DNS服务器无法解析该公网域名,比如默认用了内网专属DNS,未配置公网解析规则
- 服务器网络访问受限:服务器处于内网环境无公网出口,或者防火墙、安全组、网络ACL规则禁止了服务器对外的443端口HTTPS出站请求
- 代码URL格式不规范:你贴出的示例代码中URL没有带
https://协议前缀,不同环境对无协议URL的兼容逻辑不同,可能导致requests识别目标地址失败 - 依赖库版本差异:服务器上安装的
requests、urllib3版本和本地环境不一致,低版本依赖存在协议解析、域名解析相关的已知BUG
排查解决步骤
- 第一步验证域名解析:登录服务器执行命令
nslookup apiv2.drobaio.com,如果返回解析失败的结果,修改服务器的DNS配置为公共DNS(比如114.114.114.114、8.8.8.8)即可 - 第二步验证网络连通性:在服务器执行命令
curl -v https://apiv2.drobaio.com,如果请求超时或失败,检查服务器的出站防火墙规则、云服务商安全组配置,确认放开了HTTPS协议的出站访问权限,同时确认服务器本身具备公网访问能力 - 第三步修正代码格式:给URL补全
https://前缀,修改为url = "https://apiv2.xxxxxxxx.com/testpost",避免不同环境的兼容问题 - 第四步统一依赖版本:分别在本地和服务器执行
pip list | grep -E "requests|urllib3"查看两个库的版本,将服务器的依赖版本升级/降级到和本地可运行的版本一致
内容的提问来源于stack exchange,提问作者SunAwtCanvas
相关产品推荐
相关产品推荐

