Python 3.5 asyncio y aiohttp Errno 101 Network es inalcanzable

Estoy usando python 3.5 en Ubuntu 16.

Estoy tratando de usar aiohttp para escribir un cliente simple.

Aquí está el código que tengo. Lo tomé de aquí . Es el primer ejemplo de código, con ssl check desactivado:

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)) 

Para algunos sitios, este código funciona. Para otros, incluido http://python.org o http://google.com , no funciona. En su lugar, el código genera este error:

 aiohttp.errors.ClientOSError: [Errno 101] Cannot connect to host google.com:80 ssl:False [Can not connect to google.com:80 [Network is unreachable]] 

Probé un simple script de requests , algo como esto:

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

Esto funciona, soy capaz de llegar a google. Tanto el rizo como el wget también llegan a google.

Haciendo un poco de investigación, me encontré con un problema diferente. Ese problema es similar al mío. Lo encontré aquí . Intenté la solución ofrecida aquí, pero todavía no funciona.

Este problema no ocurre para todos los sitios. Encontré los sitios http y https que funcionaron y no funcionaron.

¿Alguna sugerencia sobre por qué sucede esto y cómo puedo solucionarlo?

¡Gracias!

Notas:

Otras cosas que probé.

  1. Añadiendo mi propio sistema de resolución de DNS, también utilizando aiohttp.
  2. Usando la versión https de los sitios, obteniendo el mismo error.
  3. Ir a una URL ligeramente diferente, por ejemplo, https://www.google.com/?#q=python

Tuve un problema similar al usar AsyncResolver como el resolvedor de la conexión. Solía ​​ser la resolución predeterminada, por lo que podría ser su caso. El problema estaba relacionado con los dominios con ipv6 donde AsyncResolver tiene problemas, por lo que la solución fue simplemente especificar la familia a las direcciones ipv4.

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