You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动