Python代理请求中遇到socket.gaierror: [Errno 11002] getaddrinfo failed错误如何解决
Failed to establish a new connection: [Errno 11002] getaddrinfo failed
Python代理请求中遇到socket.gaierror: [Errno 11002] getaddrinfo failed错误如何解决
4 回复
这个问题我遇到过,是网络代理配置导致的DNS解析失败。
核心原因是Python的socket库无法通过代理服务器解析域名。有两种解决方案:
方案1:使用requests库的代理配置(推荐)
import requests
proxies = {
'http': 'http://your-proxy:port',
'https': 'http://your-proxy:port'
}
# 或者使用socks代理
proxies = {
'http': 'socks5://your-proxy:port',
'https': 'socks5://your-proxy:port'
}
response = requests.get('https://api.example.com', proxies=proxies)
print(response.text)
方案2:设置系统级代理环境变量
import os
import requests
# 设置环境变量
os.environ['HTTP_PROXY'] = 'http://your-proxy:port'
os.environ['HTTPS_PROXY'] = 'http://your-proxy:port'
# 或者使用socks
os.environ['HTTP_PROXY'] = 'socks5://your-proxy:port'
os.environ['HTTPS_PROXY'] = 'socks5://your-proxy:port'
response = requests.get('https://api.example.com')
print(response.text)
方案3:如果必须用socket,先解析域名再连接
import socket
import socks
# 设置socks代理
socks.set_default_proxy(socks.SOCKS5, "your-proxy", 1080)
socket.socket = socks.socksocket
# 手动解析域名
try:
hostname = "api.example.com"
ip_address = socket.gethostbyname(hostname)
print(f"Resolved IP: {ip_address}")
# 使用IP地址连接
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((ip_address, 80))
except socket.gaierror as e:
print(f"DNS resolution failed: {e}")
关键检查点:
- 代理地址和端口是否正确
- 代理服务器是否支持DNS解析
- 网络连接是否正常
- 代理是否需要认证
一句话建议:用requests库配代理最省事。
域名无法解析,域名不输入 http 开头试试
addr info 挂了, 可能是连接 socket 出了问题. 搞个重试什么的吧


