HTTPSConnectionPool(host='www.dmxapi.cn', port=443): Max retries exceeded with u...
🚨 错误信息
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='www.dmxapi.cn', port=443): Max retries exceeded with url: /v1/query/video_generation?task_id=352405476393399 (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x04DD06D0>: Failed to resolve 'www.dmxapi.cn' ([Errno 11001] getaddrinfo failed)"))
🤖 AI解决方案
报错分析报告
根本原因:DNS解析失败,无法将域名
具体位置:Python的requests库尝试连接
错误上下文:urllib3库在建立HTTPS连接前,进行域名解析时失败
添加网络异常处理:所有网络请求都应包含完善的异常处理机制
配置备用DNS:在系统级别或代码级别配置备用DNS解析
ping命令:检查基础网络连通性
nslookup/dig命令:测试DNS解析
curl命令:测试API端点可用性
requests-mock库:用于单元测试,模拟网络错误场景
1. 错误翻译
原文:NameResolutionError(": Failed to resolve 'www.dmxapi.cn' ([Errno 11001] getaddrinfo failed)")
译文:域名解析错误:"无法解析 'www.dmxapi.cn' 域名([错误号11001] getaddrinfo调用失败)"
2. 原因分析
www.dmxapi.cn 转换为IP地址https://www.dmxapi.cn:443 时3. 解决方案
方案一:临时修复(添加重试机制)
python
import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry创建带重试机制的session
session = requests.Session()
retry_strategy = Retry(
total=3, # 总重试次数
backoff_factor=1, # 重试间隔
status_forcelist=[429, 500, 502, 503, 504], # 重试状态码
allowed_methods=["GET", "POST"] # 允许重试的方法
)
adapter = HTTPAdapter(max_retries=retry_strategy)
session.mount("http://", adapter)
session.mount("https://", adapter)try:
response = session.get(
"https://www.dmxapi.cn/v1/query/video_generation?task_id=352405476393399",
timeout=10 # 设置超时时间
)
response.raise_for_status()
print("请求成功:", response.json())
except requests.exceptions.RequestException as e:
print(f"请求失败: {e}")
方案二:检查网络连接和DNS
python
import socket
import requests1. 检查域名是否能解析
try:
ip_address = socket.gethostbyname("www.dmxapi.cn")
print(f"域名解析成功,IP地址: {ip_address}")
# 2. 直接使用IP地址访问(如果API支持)
# 注意:如果API使用了SNI,可能无法直接通过IP访问
headers = {'Host': 'www.dmxapi.cn'}
response = requests.get(
f"https://{ip_address}/v1/query/video_generation?task_id=352405476393399",
headers=headers,
verify=False # 注意安全风险
)
except socket.gaierror:
print("域名解析失败,请检查:")
print("1. 网络连接是否正常")
print("2. DNS服务器配置是否正确")
print("3. 防火墙是否阻止了DNS查询")
4. ️ 预防措施
最佳实践建议:
python
try:
response = requests.get(url, timeout=10)
except requests.exceptions.Timeout:
print("请求超时")
except requests.exceptions.ConnectionError:
print("连接错误,请检查网络")
except Exception as e:
print(f"其他错误: {e}")
python
import os
# 设置自定义DNS解析(在无法修改系统DNS时)
# 注意:这种方法有局限性,最好在操作系统层面配置
os.environ['REQUESTS_CA_BUNDLE'] = '/path/to/certificate.pem'
️ 推荐工具:
---
提示:如果问题持续存在,请联系您的网络管理员检查DNS服务器配置或网络代理设置。