我在Ubuntu 16上使用python 3.5。
我正在尝试使用aiohttp编写一个简单的客户端。
这是我的代码。我从这里拿走的。这是第一个代码示例,其中禁用了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.org或http://google.com不起作用。而是,代码生成此错误:
http://python.org
http://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脚本,如下所示:
requests
import requests rsp = requests.get('http://google.com') print(rsp.text)
这行得通,我可以联系谷歌。curl和wget都可以到达google。
做一些研究,我遇到了一个不同的问题。这个问题与我自己的问题相似。我在这里找到的。我尝试了此处提供的解决方案,但仍然无法正常工作。
并非所有站点都出现此问题。我遇到了正常工作的HTTP和https网站。
关于为什么发生这种情况的任何建议以及如何解决?
谢谢!
笔记:
我尝试过的其他方法。
https://www.google.com/?#q=python
使用AsyncResolver作为连接的解析器时,我遇到了类似的问题。它曾经是默认的解析器,所以根据您的情况可能是这样。问题与ipv6的域有关,其中AsyncResolver有问题,因此解决方案是简单地指定ipv4地址的族
conn = aiohttp.TCPConnector( family=socket.AF_INET, verify_ssl=False, )