Ich verwende Python 3.5 auf Ubuntu 16.Python 3.5 asyncio und aiohttp Errno 101 Netzwerk ist nicht erreichbar
Ich versuche, einen einfachen Client zu schreiben, zu verwenden aiohttp.
Hier ist der Code, den ich habe. Ich nahm es von here. Es ist das erste Codebeispiel mit deaktivierter SSL-Prüfung:
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))
Für einige Websites funktioniert dieser Code. Für andere, einschließlich http://python.org
oder http://google.com
funktioniert es nicht. Stattdessen erzeugt der Code diesen Fehler:
aiohttp.errors.ClientOSError: [Errno 101] Cannot connect to host google.com:80 ssl:False [Can not connect to google.com:80 [Network is unreachable]]
habe ich versucht, ein einfaches Skript requests
, so etwas wie dieses:
import requests
rsp = requests.get('http://google.com')
print(rsp.text)
Dies funktioniert, ich bin in der Lage google zu erreichen. Sowohl curl als auch wget erreichen auch Google.
Bei einigen Recherchen stieß ich auf ein anderes Problem. Dieses Problem ist ähnlich wie mein eigenes. Ich fand es here. Ich habe die hier angebotene Lösung ausprobiert, funktioniert aber immer noch nicht.
Dieses Problem tritt nicht bei allen Websites auf. Ich stieß auf HTTP- und HTTPS-Sites, die funktionierten und nicht funktionierten.
Irgendwelche Vorschläge, warum das passiert und wie kann ich das beheben?
Vielen Dank!
Anmerkungen:
Andere Dinge, die ich ausprobiert habe.
- Hinzufügen meines eigenen DNS-Resolvers, auch mit aiohttp.
- Verwenden Sie die https-Version der Websites, um den gleichen Fehler zu erhalten.
- Gehen zu einer etwas anderen URL, zum Beispiel
https://www.google.com/?#q=python
Hallo! Hast du dieses Problem gelöst? Ich bekomme den gleichen Fehler nur Workaround, die für mich arbeiten (neben der Angabe von family = socket.AF_INET was ich nicht tun kann) - Sitzung für jede Anfrage erstellen, aber es ist keine gute Lösung. – Vova
Hey. Ja, aber ich habe es vergessen, seit es so lange her ist. Lass mich nachsehen und ich melde mich bei dir, wenn ich die Antwort finde. – mayk93
Versuchen Sie 'family = socket.AF_INET' zum Connector hinzuzufügen oder 'allow_redirects = True' (wahrscheinlich ist es nicht das) zur Sitzung hinzuzufügen. – mayk93