Python Requests请求网站触发WinError 10014无效指针错误
解决WinError 10014无效指针地址及OpenDNS解析异常问题
你的代码在个人电脑正常运行、办公电脑报错,核心问题肯定出在办公网络的配置限制上——毕竟代码本身是没问题的。结合你提到的域名被解析到OpenDNS地址、触发WinError 10014的情况,下面是几个针对性的解决方案,按优先级试试:
1. 直接用真实IP访问(绕过异常DNS解析)
OpenDNS解析出来的地址大概率有问题,你可以手动查询目标域名的真实IP,然后直接请求IP并带上Host头,让服务器识别你要访问的站点:
操作步骤:
- 打开命令行,执行
nslookup bvmf.bmfbovespa.com.br 8.8.8.8(用Google DNS查询真实IP),得到类似200.147.20.20的结果(实际以查询值为准) - 修改代码如下:
from bs4 import BeautifulSoup import requests # 替换为你查到的真实IP target_ip = "200.147.20.20" # 保留原路径和参数,用IP替换域名 url = f"http://{target_ip}/indices/ResumoCarteiraTeorica.aspx?Indice=IBOV&idioma=pt-br" # 必须加Host头,否则服务器不知道你要访问哪个站点 headers = { "Host": "bvmf.bmfbovespa.com.br" } try: response = requests.get(url, headers=headers) response.raise_for_status() # 主动抛出HTTP错误 source = response.text # 后续处理逻辑 soup = BeautifulSoup(source, "html.parser") except Exception as e: print(f"请求失败: {e}")
2. 强制用可靠DNS解析域名
如果不想手动查IP,可以用dnspython库指定可靠的DNS服务器(比如Google的8.8.8.8或Cloudflare的1.1.1.1)来自动解析域名:
操作步骤:
- 先安装依赖库:
pip install dnspython - 修改代码:
from bs4 import BeautifulSoup import requests import dns.resolver def get_real_ip(domain): # 指定用Google DNS解析 resolver = dns.resolver.Resolver() resolver.nameservers = ["8.8.8.8"] # 查询域名的A记录(IPv4地址) answer = resolver.resolve(domain, "A") return str(answer[0]) domain = "bvmf.bmfbovespa.com.br" real_ip = get_real_ip(domain) url = f"http://{real_ip}/indices/ResumoCarteiraTeorica.aspx?Indice=IBOV&idioma=pt-br" headers = {"Host": domain} source = requests.get(url, headers=headers).text
3. 检查办公网络代理设置
办公电脑基本都会配置代理服务器,requests默认会读取系统代理,但偶尔会出现不生效的情况。你可以手动指定代理:
from bs4 import BeautifulSoup import requests # 替换为你的办公代理地址和端口(比如从浏览器设置里找) proxies = { "http": "http://your-office-proxy:port", "https": "http://your-office-proxy:port" } url = "http://bvmf.bmfbovespa.com.br/indices/ResumoCarteiraTeorica.aspx?Indice=IBOV&idioma=pt-br" source = requests.get(url, proxies=proxies).text
4. 切换到HTTPS协议尝试
原请求用的是HTTP,换成HTTPS可能绕过某些网络劫持或解析异常:
from bs4 import BeautifulSoup import requests # 把http替换为https url = "https://bvmf.bmfbovespa.com.br/indices/ResumoCarteiraTeorica.aspx?Indice=IBOV&idioma=pt-br" source = requests.get(url).text
问题根源说明
WinError 10014属于网络层的地址指针无效错误,结合你提到的域名被解析到OpenDNS地址,大概率是办公网络强制配置了OpenDNS,而OpenDNS对该域名的解析结果异常(比如指向了无法访问的劫持IP),导致requests尝试连接时触发错误。个人电脑没有这类网络限制,所以能正常访问。
内容的提问来源于stack exchange,提问作者Lucas Almeida




