Ich möchte https-Anfragen schnüffeln, aber mit dem sslError fehlgeschlagen
Ich möchte, dass die aiohttp-Sitzung meinem Charles-Root-Zertifikat vertraut (mein Betriebssystem hat ihm bereits vertraut) oder die SSL-Überprüfung überspringen.
Neigher vertraut dem chrales-Zertifikat der aiohttp-Sitzung noch überspringt es die SSL-Überprüfung
import asyncio
import aiohttp
async def sync(i):
url = 'https://baidu.com'
async with aiohttp.ClientSession() as session:
print('synci'+i)
data = {
'key': 'abc',
}
async with session.post(url, data=data,proxy="http://127.0.0.1:8888") as resp:
#assert await resp.json() == { "cookies": {"cookies_are": "working"}}
print(await resp.text())
async def f1(i):
print('init'+str(i));
await sync(str(i));
r1=f1(1)
r2=f1(2)
print('start')
asyncio.get_event_loop().run_until_complete(asyncio.gather(*[ r1, r2, ]))
Ausgabe:
ssl.SSLError: [SSL] shutdown while in init (_ssl.c:2098)
python3.5.2
Mac OS X
Leider liegt das Problem außerhalb des Anwendungsbereichs von aiohttp.
Sie könnten aiohttp.Connector
mit benutzerdefinierten ssl_context
erstellen (siehe https://docs.python.org/3/library/ssl.html zum Erstellen eines SSL-Kontextobjekts).
Möglicherweise müssen Sie den Kontext mithilfe Ihrer Zertifikatsketten richtig konfigurieren.
PS aiohttp.Connector(verify_ssl)
deaktiviert die SSL-Zertifikatsüberprüfung.
@asvetlov
Leider unterstützt _aiohttp's seesion_ keinen Connector: TypeError: _request() got an unexpected keyword argument 'connector'
import asyncio
import aiohttp
async def sync(i):
url = 'https://baidu.com'
async with aiohttp.ClientSession() as session:
print('synci'+i)
data = {
'key': 'abc',
}
help(session.post)
async with session.post(url, data=data,proxy="http://127.0.0.1:8888", connector=aiohttp.TCPConnector(verify_ssl=False)) as resp:
#assert await resp.json() == { "cookies": {"cookies_are": "working"}}
print(await resp.text())
async def f1(i):
print('init'+str(i));
await sync(str(i));
r1=f1(1)
r2=f1(2)
print('start')
asyncio.get_event_loop().run_until_complete(asyncio.gather(*[ r1, r2, ]))
Übergeben Sie die Connector-Instanz an den aiohttp.ClientSession
Konstruktor, nicht an die session.post()
Coroutine.
@asvetlov Es funktioniert, vielen Dank!
Dieser Thread wurde automatisch gesperrt, da es keine gab
alle Aktivitäten der letzten Zeit, nachdem es geschlossen wurde. Bitte öffnen Sie eine [neue Ausgabe] für
verwandte Fehler.
Wenn Sie das Gefühl haben, in dieser Diskussion wurden wichtige Punkte angesprochen,
bitte fügen Sie diese Auszüge in diese [neue Ausgabe] ein.
Hilfreichster Kommentar
Leider liegt das Problem außerhalb des Anwendungsbereichs von aiohttp.
Sie könnten
aiohttp.Connector
mit benutzerdefiniertenssl_context
erstellen (siehe https://docs.python.org/3/library/ssl.html zum Erstellen eines SSL-Kontextobjekts).Möglicherweise müssen Sie den Kontext mithilfe Ihrer Zertifikatsketten richtig konfigurieren.
PS
aiohttp.Connector(verify_ssl)
deaktiviert die SSL-Zertifikatsüberprüfung.