当前位置: 首页 > 知识库问答 >
问题:

无法访问python 3.5 asyncio和aiohttp Errno 101网络

袁安志
2023-03-14

我在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.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]]

我尝试了一个简单的请求脚本,类似这样:

import requests
rsp = requests.get('http://google.com')
print(rsp.text)

这工作,我能够达到谷歌。curl和wget也可以访问谷歌。

做一些研究,我遇到了一个不同的问题。那个问题和我自己的相似。我在这里找到的。我尝试了这里提供的解决方案,但它仍然不起作用。

并非所有站点都会出现此问题。我遇到了http和https站点,它们工作正常,也不工作。

有没有关于为什么会发生这种情况以及如何解决的建议?

非常感谢。

笔记:

我试过的其他东西。

  1. 添加我自己的DNS解析器,也使用aiohttp
  2. 使用https版本的站点,得到相同的错误
  3. 转到稍微不同的url,例如https://www.google.com/?#q=python

共有1个答案

慕容明煦
2023-03-14

在使用AsyncResolver作为连接的解析程序时,我遇到了类似的问题。它曾经是默认的解析器,因此可能会根据您的情况进行更改。该问题与ipv6域有关,其中异步解析程序存在问题,因此解决方案是简单地指定ipv4地址族

conn = aiohttp.TCPConnector(
        family=socket.AF_INET,
        verify_ssl=False,
    )
 类似资料:
  • 现在我正试图通过和但该网站不可用。

  • 问题内容: 我有一个具有多个IP地址的专用服务器,某些IP关联了mac地址,而其他IP(在子网中)则没有mac地址。我已经使用以下方法创建了docker macvlan网络: 我的IP:88.99.102.115,Mac:00:50:56:00:60:42。使用以下方法创建了一个容器: 这有效,我可以从外部访问该IP地址托管的Nginx。 IP没有MAC地址且网关不在子网中的情况。 子网:88.9

  • 我有一个aws lambda函数,它返回以下响应: 但是我在前端角度应用程序中得到以下误差。 CORS策略阻止从来源“HTTP://127.0.0.1:8080”访问位于“https://xxxxxxxxx.execute-api.us-east-1.amazonaws.com/dev/price”的XMLHttpRequest:对飞行前请求的响应没有通过访问控制检查:它没有HTTP ok状态。

  • 我们在局域网内搭建了一个Harbor私服,局域网IP地址为: 192.168.3.9,这台机器本身具有公网IP,也有公网域名。 harbor.yml配置文件中,hostname配置为: 现在发现一个问题,如果把hostname配置为内网地址,那么在局域网内可以访问。但在公网是无法访问的,即通过本机的外网ip无法访问。 如果将 Hostname改成 公网ip,那么存在另一个问题,就是在公网可以访问,

  • 内网搭建后 加入端口访问 不可行吗 公司要求必须加入端口访问内网,然而现在目前再用的网站做迁移的时候发现很多端口 我批量开启后 测试无法访问 路由器映射 已经完成 公司用的专线 有动态公网地址 外网中可以访问面板地址也可以正常操作 唯独部署的 项目端口无法访问 ng的80端口 没动 创建的空间端口 8080 1070 这种 也无法访问 折腾不来

  • 我建立了一个spring boot vaadin项目,并根据springs教程实现了这个类,但无法使用localhost:8080/ui访问ui。我做错了什么? 我的UI类: 这是我的Spring配置类: 这是我的pom.xml: [更新1]我注意到这条日志消息: 无法增强@Configuration bean definition'com.vaadin.spring。因为它的单例实例创建得太早。