Я использую Python 3.5 на Ubuntu 16.питона 3,5 asyncio и aiohttp Errno 101 Сеть недостижима
Я пытаюсь использовать 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.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
сценарий, что-то вроде этого:
import requests
rsp = requests.get('http://google.com')
print(rsp.text)
Это работает, я могу достичь Google. Оба curl и wget также достигают google.
Выполнение некоторых исследований, я столкнулся с другой проблемой. Эта проблема похожа на мою. Я нашел его here. Я попробовал предлагаемое здесь решение, но оно все еще не работает.
Эта проблема не возникает для всех сайтов. Я наткнулся на сайты http и https, которые работали и не работали.
Любые предложения относительно того, почему это происходит и как я могу это исправить?
Спасибо!
Примечания:
Другие предметы, которые я пробовал.
- Добавление собственного DNS-резольвера, также использующего aiohttp.
- Использование https-версии сайтов, получение одинаковой ошибки.
- Переход к немного другой URL, например
https://www.google.com/?#q=python
Здравствуйте! Вы решили эту проблему? Я получаю ту же ошибку только обходной путь, который работает для меня (помимо описания семейства = socket.AF_INET, который я не могу сделать) - создайте сеанс для каждого запроса, но это нехорошее решение. – Vova
Эй. Да, но я забыл, как это было так давно. Позвольте мне проверить, и я вернусь к вам, если найду ответ. – mayk93
Попробуйте добавить 'family = socket.AF_INET' к коннектору или 'allow_redirects = True' (возможно, это не так) к сеансу. – mayk93