我在Ubuntu 16上使用python 3.5。

我正在尝试使用aiohttp编写一个简单的客户端。

这是我的代码。我从here拿走了。这是第一个代码示例,其中禁用了ssl检查:

import aiohttp
import asyncio
import async_timeout

async def fetch(session, url):
    with async_timeout.timeout(10):
        async with session.get(url) as response:
            return await response.text()

async def main(loop):
    conn = aiohttp.TCPConnector(verify_ssl=False)
    async with aiohttp.ClientSession(loop=loop, connector=conn) as session:
        html = await fetch(session, 'http://www.google.com')
        print(html)

loop = asyncio.get_event_loop()
loop.run_until_complete(main(loop))

loop = asyncio.get_event_loop()
loop.run_until_complete(main(loop))

对于某些站点,此代码有效。对于其他字符,包括http://python.orghttp://google.com,则不起作用。而是,代码生成此错误:
aiohttp.errors.ClientOSError: [Errno 101] Cannot connect to host google.com:80 ssl:False [Can not connect to google.com:80 [Network is unreachable]]

我尝试了一个简单的requests脚本,如下所示:
import requests
rsp = requests.get('http://google.com')
print(rsp.text)

这行得通,我可以联系谷歌。 curl和wget都可以到达google。

做一些研究,我遇到了一个不同的问题。这个问题与我自己的问题相似。我找到了它here。我尝试了此处提供的解决方案,但仍然无法正常工作。

并非所有站点都出现此问题。我遇到了正常工作的HTTP和https网站。

关于为什么会发生以及如何解决此问题的任何建议?

谢谢!

笔记:

我尝试过的其他方法。
  • 也使用aiohttp添加我自己的DNS解析器。
  • 使用网站的https版本,会出现相同的错误。
  • 转到一个稍微不同的URL,例如https://www.google.com/?#q=python
  • 最佳答案

    使用AsyncResolver作为连接的解析器时,我遇到了类似的问题。它曾经是默认的解析程序,因此可能会因您的情况而有所不同。问题与ipv6的域有关,其中AsyncResolver有问题,因此解决方案是简单地指定ipv4地址的族

    conn = aiohttp.TCPConnector(
            family=socket.AF_INET,
            verify_ssl=False,
        )
    

    关于python 3.5 asyncio和aiohttp Errno 101网络无法访问,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40347726/

    10-14 17:46
    查看更多