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 解析问题吗?


这个问题我遇到过,是网络代理配置导致的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}")

关键检查点:

  1. 代理地址和端口是否正确
  2. 代理服务器是否支持DNS解析
  3. 网络连接是否正常
  4. 代理是否需要认证

一句话建议:用requests库配代理最省事。

域名无法解析,域名不输入 http 开头试试

addr info 挂了, 可能是连接 socket 出了问题. 搞个重试什么的吧

回到顶部