You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows7下Anaconda Python3.6.3异步请求遇ClientConnectorError求助

解决Windows 7下Anaconda Python 3.6.3异步请求的ClientConnectorError问题

我在Windows 7 64位系统的Anaconda Python 3.6.3环境中,尝试用以下代码发起异步请求获取URL(代码来自某文章):

import asyncio
from aiohttp import ClientSession
async def hello(url):
    async with ClientSession() as session:
        async with session.get(url) as response:
            response = await response.read()
            print(response)
loop = asyncio.get_event_loop()
loop.run_until_complete(hello("http://httpbin.org/headers"))

但运行后遇到了这个错误:

ClientConnectorError: Cannot connect to host httpbin.org:80 ssl:False [getaddrinfo failed]
Traceback (most recent call last):
File "<ipython-...

排查与解决方法

我之前也踩过类似的坑,给你几个实用的解决方向:

  • 先确认网络基础连通性:getaddrinfo failed本质是DNS解析失败,先打开浏览器访问http://httpbin.org/headers,如果浏览器也打不开,那问题出在网络本身——可能是防火墙拦截了请求、网络需要代理,或者DNS服务器挂了。先把基础网络问题搞定。

  • 配置代理(如果你的网络需要):aiohttp默认不会自动读取系统代理设置,如果你的网络必须走代理,得手动给ClientSession加代理参数:

    import asyncio
    from aiohttp import ClientSession, TCPConnector
    
    async def hello(url):
        # 替换成你的代理地址和端口
        connector = TCPConnector(proxy="http://your-proxy-address:port")
        async with ClientSession(connector=connector) as session:
            async with session.get(url) as response:
                response = await response.read()
                print(response)
    
    loop = asyncio.get_event_loop()
    loop.run_until_complete(hello("http://httpbin.org/headers"))
    
  • 升级aiohttp版本:Python 3.6.3属于比较老的版本,对应的aiohttp初始版本可能存在Windows 7下的DNS解析bug。试试用conda升级到兼容py3.6的稳定版本:

    conda install aiohttp==3.8.6
    

    这个版本对Python 3.6的兼容性很好,能解决不少老版本的兼容性问题。

  • 手动指定DNS服务器:如果是DNS解析的问题,可以强制aiohttp用指定的DNS服务器(比如国内的114.114.114.114):

    import asyncio
    from aiohttp import ClientSession, TCPConnector, AsyncResolver
    
    async def hello(url):
        resolver = AsyncResolver(nameservers=["114.114.114.114"])
        connector = TCPConnector(resolver=resolver)
        async with ClientSession(connector=connector) as session:
            async with session.get(url) as response:
                response = await response.read()
                print(response)
    
    loop = asyncio.get_event_loop()
    loop.run_until_complete(hello("http://httpbin.org/headers"))
    
  • 禁用IPv6:Windows 7的IPv6配置有时候会出问题,导致解析优先尝试IPv6失败。可以强制aiohttp只用IPv4:

    import asyncio
    import socket
    from aiohttp import ClientSession, TCPConnector
    
    async def hello(url):
        connector = TCPConnector(family=socket.AF_INET)
        async with ClientSession(connector=connector) as session:
            async with session.get(url) as response:
                response = await response.read()
                print(response)
    
    loop = asyncio.get_event_loop()
    loop.run_until_complete(hello("http://httpbin.org/headers"))
    

内容的提问来源于stack exchange,提问作者BioGeek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:11:01