Hier ist die erste Ausgabe.
https://github.com/kennethreitz/requests/issues/2906
Python 3.5.1 (https://www.python.org/downloads/) Virtualenv 14.0.5 Mac OS X 10.11.3
Zuerst habe ich eine virtuelle Umgebung erstellt und pip install requests[security]
Dann habe ich
>>> from cryptography.hazmat.backends.openssl.backend import backend
>>> print(backend.openssl_version_text())
OpenSSL 1.0.2f 28 Jan 2016
was ich erwartet hatte.
Etwa eine Stunde lang hat alles super funktioniert.
Dann stürzten einige meiner eigenen Skripte ab, was normal war. Wenn ich danach versuche, mein Skript erneut auszuführen, habe ich folgende Ausnahmen erhalten
ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:645)
requests.packages.urllib3.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:645)
requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:645)
Also habe ich eine andere Python-Konsole geöffnet und
>>> requests.get("https://www.google.com")
<Response [200]>
>>> requests.get("https://www.telegram.org")
Traceback (most recent call last):
File "VirtualenvPath/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 559, in urlopen
body=body, headers=headers)
File "VirtualenvPath/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 345, in _make_request
self._validate_conn(conn)
File "VirtualenvPath/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 784, in _validate_conn
conn.connect()
File "VirtualenvPath/lib/python3.5/site-packages/requests/packages/urllib3/connection.py", line 252, in connect
ssl_version=resolved_ssl_version)
File "VirtualenvPath/lib/python3.5/site-packages/requests/packages/urllib3/util/ssl_.py", line 305, in ssl_wrap_socket
return context.wrap_socket(sock, server_hostname=server_hostname)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 376, in wrap_socket
_context=self)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 747, in __init__
self.do_handshake()
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 983, in do_handshake
self._sslobj.do_handshake()
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 628, in do_handshake
self._sslobj.do_handshake()
ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:645)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "VirtualenvPath/lib/python3.5/site-packages/requests/adapters.py", line 376, in send
timeout=timeout
File "VirtualenvPath/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 588, in urlopen
raise SSLError(e)
requests.packages.urllib3.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:645)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "VirtualenvPath/lib/python3.5/site-packages/requests/api.py", line 67, in get
return request('get', url, params=params, **kwargs)
File "VirtualenvPath/lib/python3.5/site-packages/requests/api.py", line 53, in request
return session.request(method=method, url=url, **kwargs)
File "VirtualenvPath/lib/python3.5/site-packages/requests/sessions.py", line 468, in request
resp = self.send(prep, **send_kwargs)
File "VirtualenvPath/lib/python3.5/site-packages/requests/sessions.py", line 576, in send
r = adapter.send(request, **kwargs)
File "VirtualenvPath/lib/python3.5/site-packages/requests/adapters.py", line 447, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:645)
>>>
Also habe ich neu gestartet, alle diese Bibliotheken deinstalliert und sie erneut mit pip installiert. Alles hat wieder funktioniert.
Aber nach 1 Stunde oder so wieder die gleiche Ausnahme.
Dann stürzten einige meiner eigenen Skripte ab, was normal war.
Wie sieht so ein Crash aus?
Wenn ich danach versuche, mein Skript erneut auszuführen, habe ich folgende Ausnahmen erhalten
Können Sie sie danach überhaupt nicht mehr ausführen?
@sigmavirus24 Es ist nur ein Fehler in meinem eigenen Code, der nichts mit Netzwerken zu tun hat.
Ich bin mir nicht sicher, ob das der wahre Grund ist oder nur Zufall.
Aber eines ist sicher, irgendwann kann ich keine Anfrage an https://www.telegram.org stellen , was ich direkt nach der Installationsanfrage tun kann.
Nur zur Info: #2906
Daher möchte ich darauf hinweisen, dass Sie requests[security]
installieren, was bedeutet, dass wir pyOpenSSL verwenden sollten, aber Ihr Stacktrace zeigt, dass dies nicht der Fall ist. Das ist faszinierend.
@sigmavirus24 Kann ich
Irgendeine Idee? @Lukasa
Was hier am wichtigsten ist, ist also: Warum verwendet Ihr Code PyOpenSSL nicht mehr? Können Sie bei einem Absturz eine Python-Konsole in Ihrer virtuellen Umgebung öffnen und dann import urllib3.contrib.pyopenssl
ausführen, um zu sehen, ob das funktioniert?
Konnte es jetzt nicht reproduzieren. Ich werde dies zuerst schließen und wenn das Problem erneut auftritt, füge ich das Ergebnis ein und öffne es erneut.
@Lukasa Ich denke, da Anfragen mit einer eigenen urllib3 ausgeliefert werden, konnte ich urllib3 nicht alleine importieren. Und das folgende Ergebnis bestätigt es.
Python 3.5.1 (v3.5.1:37a07cee5969, Dec 5 2015, 21:12:44)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import urllib3.contrib.pyopenssl
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named 'urllib3'
>>> ^D
pip list
cffi (1.5.0)
cryptography (1.2.2)
idna (2.0)
ndg-httpsclient (0.4.0)
pip (8.0.2)
pyasn1 (0.1.9)
pycparser (2.14)
pyOpenSSL (0.15.1)
requests (2.9.1)
setuptools (20.0)
six (1.10.0)
wheel (0.26.0)
Es tut mir leid, versuchen Sie es mit dem Importieren von requests.packages.urllib3.contrib.pyopenssl
@Lukasa
Python 3.5.1 (v3.5.1:37a07cee5969, Dec 5 2015, 21:12:44)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests.packages.urllib3.contrib.pyopenssl
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "VirtualenvPath/lib/python3.5/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", line 57, in <module>
from socket import _fileobject, timeout, error as SocketError
ImportError: cannot import name '_fileobject'
>>>
Ich wette, das ist ein Fehler in 3.5 mit pyOpenSSL, den wir über @lukasa nicht wussten (in Bezug auf _fileobject
nicht vorhanden.
Nein, ich weiß davon und habe einen Upstream-Fix in urllib3 vorgeschlagen, als wir mit dem Testen von PyOpenSSL begannen. Die Realität ist, dass requests[security]
mit Python 3 nicht funktioniert (und noch nie funktioniert hat). Das wird in einer kommenden Version von Requests behoben.
Das löst also unser Rätsel nicht: Warum hat das eine Weile funktioniert und dann aufgehört?
Tangentialer Kommentar, der auf dem ursprünglichen Bericht basiert, hat die in Python integrierte ssl.py eine Option zum Unterdrücken von zerlumpten EOFs, da es viele Websites gibt, die SSL-Verbindungen unsauber herunterfahren. manchmal unzuverlässig, als ob es eine Frage des Timings oder des Zufalls wäre. das Folgende ist ein Auszug aus ssl.py
class SSLSocket(socket):
[...]
def read(self, len=0, buffer=None):
"""Read up to LEN bytes and return them.
Return zero-length string on EOF."""
self._checkClosed()
if not self._sslobj:
raise ValueError("Read on closed or unwrapped SSL socket.")
try:
return self._sslobj.read(len, buffer)
except SSLError as x:
if x.args[0] == SSL_ERROR_EOF and self.suppress_ragged_eofs:
if buffer is not None:
return 0
else:
return b''
else:
raise
Dieselbe Ausnahme bei Python 2.7.11/OSX beim Schlagen eines Servers mit requests
unter gevent
. Könnte das zusammenhängen?
@the-efi könnten Sie genauer angeben, welche Ausnahme Sie sehen?
r = requests.post(self.MY_URL, data=parameters)
File "/Users/me/Envs/my_env/lib/python2.7/site-packages/requests/api.py", line 109, in post
return request('post', url, data=data, json=json, **kwargs)
File "/Users/me/Envs/my_env/lib/python2.7/site-packages/requests/api.py", line 50, in request
response = session.request(method=method, url=url, **kwargs)
File "/Users/me/Envs/my_env/lib/python2.7/site-packages/requests/sessions.py", line 465, in request
resp = self.send(prep, **send_kwargs)
File "/Users/me/Envs/my_env/lib/python2.7/site-packages/requests/sessions.py", line 573, in send
r = adapter.send(request, **kwargs)
File "/Users/me/Envs/my_env/lib/python2.7/site-packages/requests/adapters.py", line 431, in send
raise SSLError(e, request=request)
SSLError: EOF occurred in violation of protocol (_ssl.c:590)
@the-efi Hast du pyopenssl
, pyasn1
und ndg-httpsclient
installiert?
pyopenssl: negativ
pyasn1: pyasn1==0.1.8 (vorübergehend, denke ich)
ndg-httpsclient: negativ
Okay. Sie verwenden auch Python 2.7, also scheinen Sie und das Poster unterschiedliche Probleme zu haben.
Wissen Sie, ob Ihr Problem beim Verbindungsaufbau oder bei einer Verbindung mit langer Laufzeit aufgetreten ist?
Ich könnte mir vorstellen, dass dies während des Verbindungsaufbaus geschieht, aber wenn requests
zuvor geöffnete Verbindungen mit Connection: keep-alive
wiederverwendet, könnte ich mich irren.
Requests verwendet tatsächlich nach Möglichkeit zuvor geöffnete Verbindungen wieder, weshalb ich die Frage gestellt habe. ;)
Es wäre sehr nützlich, wenn wir in Ihrem Fall eine Paketerfassung dieses Problems erhalten könnten, obwohl dies schwierig sein kann, da es unter hoher Last auftritt.
Kein Problem, ich werde nach dem Wochenende sehen, was ich dagegen tun kann. Soll ich das als neue Ausgabe einreichen?
Ja bitte. =)
@Lukasa Irgendwelche Fortschritte mit urllib3?
@caizixian Wir kommen dahin, aber wir haben einige Probleme mit unseren CI-Tests, weil Travis CI ein ziemlich altes PyPy-Image hat, das sich derzeit nicht gut mit PyOpenSSL verhält. Ich werde sehen, ob ich das irgendwann am Wochenende zum Laufen bekomme.
@Lukasa @shazow urllib3 hat auf Wunsch immer ein Zuhause unter http://ci.kennethreitz.org !
Irgendein Update zu diesem? Es passiert ziemlich oft, wenn man mit aws arbeitet.
@mindw Soweit ich weiß, wissen wir nicht genau, wo und wann es passiert. Im obigen Backtrace passiert es während des Handshakes, was normalerweise ein Problem bei der Verhandlung ist: Wann tritt dieser Fehler auf?
OS X, Python 3.5.1, fordert 2.10.0 + Sicherheit an.
Ich werde versuchen, zusätzliche Informationen auf Anfrage bereitzustellen :)
Traceback (most recent call last):
File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 578, in urlopen
chunked=chunked)
File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 351, in _make_request
self._validate_conn(conn)
File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 814, in _validate_conn
conn.connect()
File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/packages/urllib3/connection.py", line 289, in connect
ssl_version=resolved_ssl_version)
File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/packages/urllib3/util/ssl_.py", line 308, in ssl_wrap_socket
return context.wrap_socket(sock, server_hostname=server_hostname)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 376, in wrap_socket
_context=self)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 747, in __init__
self.do_handshake()
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 983, in do_handshake
self._sslobj.do_handshake()
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 628, in do_handshake
self._sslobj.do_handshake()
ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:645)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/adapters.py", line 403, in send
timeout=timeout
File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 604, in urlopen
raise SSLError(e)
requests.packages.urllib3.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:645)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/gabdav01/.virtualenvs/splatt/bin/splatt", line 9, in <module>
load_entry_point('splatt', 'console_scripts', 'splatt')()
File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/click/core.py", line 716, in __call__
return self.main(*args, **kwargs)
File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/click/core.py", line 696, in main
rv = self.invoke(ctx)
File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/click/core.py", line 1060, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/click/core.py", line 889, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/click/core.py", line 534, in invoke
return callback(*args, **kwargs)
File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/click/decorators.py", line 17, in new_func
return f(get_current_context(), *args, **kwargs)
File "/Users/gabdav01/work/paas/splatt/splatt/cmd.py", line 108, in create
url, json=json, headers=headers)
File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/sessions.py", line 518, in post
return self.request('POST', url, data=data, json=json, **kwargs)
File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/sessions.py", line 475, in request
resp = self.send(prep, **send_kwargs)
File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/sessions.py", line 585, in send
r = adapter.send(request, **kwargs)
File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/adapters.py", line 477, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:645)
Dies deutet stark auf ein Fehlen von SNI oder keine Verschlüsselungsüberlappung hin. Können Sie die Kryptografie-Befehlszeile im OP ausdrucken und mir sagen, was sie sagt?
wie würde ich das machen?
@mindw Schauen Sie sich OP (den ursprünglichen Beitrag) an, wo @caizixian das Backend von cryptography
importiert und die OpenSSL-Version druckt.
Bekomme auch dieses Problem. Welche Informationen kann ich zur Verfügung stellen, um bei der Lösung zu helfen?
@LukeNZ Viele Dinge. Python-Version, installierte Pakete, Anforderungsversion, OpenSSL-Version, Betriebssystem und die Website, die Sie kontaktieren möchten.
Hallo, ich habe gerade angefangen, Requests zu verwenden, und ich erhalte das gleiche auch. Ich verwende OS X 10.11.5, Python 3.5.1 in einer virtuellen Umgebung, neueste Version der Anforderungen. Das Ausführen der open_ssl-Version wie im OP gibt mir
OpenSSL 1.0.2h 3. Mai 2016
Ich versuche, eine Verbindung zu https://api.marketcircle.net/v1/ herzustellen .
Es sieht so aus, als ob Requests das einzige Spiel in der Stadt ist, ohne einen Haufen Code zu schreiben - Unirest installiert sich nicht mehr für Python 3, also Junge, ich hoffe, das wird bald herausgefunden.
@eoco Ok, das ist interessant. Ich kann dies unter OS X 10.11.6 Beta, Python 3.5.1 mit Requests 2.10.0 nicht reproduzieren. Tritt das Problem regelmäßig oder zeitweise auf?
Konsequent - ich konnte mich noch nicht erfolgreich verbinden.
Meine Tracebacks sind ziemlich nah an mindws oben, werden hier unten gepostet. Aber nur zu Ihrer Information habe ich Anfragen für Python 2.7 installiert, um dies ebenfalls zu testen, und erhielt eine SNMissingWarning: Obwohl die gleiche Warnung sagte, dass es möglicherweise damit zu tun hat, dass es sich um eine ältere Version von Python handelt, bin ich mir jedoch nicht sicher, ob dies der Fall ist Fall. Egal, auch kein Verbindungsglück.
SNIMissingWarning
/Library/Python/2.7/site-packages/requests-2.10.0-py2.7.egg/requests/packages/urllib3/util/ssl_.py:122: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
Ich bin auch zurückgegangen und habe Unirest in Python 2.7 installiert und einen weiteren EOF-Fehler erhalten, aber dieses Mal in urllib2:
urllib2.URLError: <urlopen error [Errno 8] _ssl.c:510: EOF occurred in violation of protocol>
Das hat also vielleicht überhaupt nichts mit Requests.py zu tun, aber um ehrlich zu sein, weiß ich nicht, wohin ich von hier aus gehen soll, außer Python nicht zu verwenden. Hier ist der Traceback von Anfragen/Python 3.5.1:
`
Importanfragen
URL = ' https://api.marketcircle.net/v1/ '
r = request.get(url) # keine Autorisierungs-Header hinzufügen, nur auf Verbindung prüfen
Traceback (letzter Anruf zuletzt):
Datei "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", Zeile 578, in urlopen
stückig = stückig)
Datei "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", Zeile 351 in _make_request
self._validate_conn(conn)
Datei "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", Zeile 814, in _validate_conn
conn.connect()
Datei "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connection.py", Zeile 289, in connect
ssl_version=aufgelöste_ssl_version)
Datei "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/util/ssl_.py", Zeile 308, in ssl_wrap_socket
return context.wrap_socket(sock, server_hostname=server_hostname)
Datei "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", Zeile 376, in wrap_socket
_context=selbst)
Datei "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", Zeile 747, in __init__
self.do_handshake()
Datei "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", Zeile 983, in do_handshake
self._sslobj.do_handshake()
Datei "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", Zeile 628, in do_handshake
self._sslobj.do_handshake()
ssl.SSLEOFError: EOF ist unter Verletzung des Protokolls aufgetreten (_ssl.c:645)
Während der Behandlung der obigen Ausnahme ist eine weitere Ausnahme aufgetreten:
Traceback (letzter Anruf zuletzt):
Datei "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/adapters.py", Zeile 403, in send
Zeitüberschreitung = Zeitüberschreitung
Datei "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", Zeile 604, in urlopen
SSLError(e) auslösen
request.packages.urllib3.Exceptions.SSLError: EOF ist unter Verletzung des Protokolls aufgetreten (_ssl.c:645)
`
Also, ich entschuldige mich, wenn dies nicht hilfreich ist. Dankeschön!
Können Sie das bitte ausführen und mir die Ausgabe zeigen? python3 -c "import ssl; print(ssl.OPENSSL_VERSION)"
Das ist also das Ergebnis: (Andere Version als der Befehlslauf im OP)
OpenSSL 0.9.8zh 14. Januar 2016
Dankeschön!
@eoco Ok, cool.
Das Problem hier ist also, dass Ihr Python 3 mit dem System OpenSSL verbunden ist, das uralt ist. Was ist in Ihrer Pip-Umgebung? Können Sie python3 -m pip freeze
für mich laufen lassen?
Da ist nicht viel..
Mozaica-iMac:~ eoc$ python3 -m pip einfrieren
py3minepi==0.0.1
requests==2.10.0
You are using pip version 8.1.1, however version 8.1.2 is available.
Vielen Dank, dass Sie in dieser Hinsicht alles getan haben. Es ist offensichtlich kein Problem mit Anfragen, daher weiß ich Ihre Zeit wirklich zu schätzen.
Ok, der einfachste Weg für Sie, dies zu beheben, ist python3 -m pip install pyopenssl pyasn1 ndg-httpsclient
auszuführen. Das sollte Ihr Problem beheben, aber wenn dies nicht der Fall ist, können wir aggressivere Optionen verfolgen.
Hmm. Danach immer noch der gleiche Fehler-
python3.5 -m pip einfrieren
cffi==1.6.0
cryptography==1.4
idna==2.1
ndg-httpsclient==0.4.1
py3minepi==0.0.1
pyasn1==0.1.9
pycparser==2.14
pyOpenSSL==16.0.0
requests==2.10.0
six==1.10.0
@eoco Hrm. Können Sie das für mich ausführen? python3 -c "from requests.packages.urllib3.contrib import pyopenssl; pyopenssl.inject_into_urllib3()"
und sagen Sie mir, was das ausgibt? Führen Sie auch python3 -c "from cryptography.hazmat.backends.openssl.backend import backend; print(backend.openssl_version_text())"
.
Whoa, das weist sicherlich auf das Problem hin. Beim ersten Lauf habe ich folgenden Traceback erhalten:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", line 63, in <module>
from urllib3.packages.backports.makefile import backport_makefile
ImportError: No module named 'urllib3'
Ist urllib nicht Teil der Standardbibliothek? Auf jeden Fall habe ich pip urllib installiert und jetzt bin ich einsatzbereit.
Ich kann Ihnen nicht sagen, wie sehr ich Ihre Hilfe dabei schätze, Sie haben weit darüber hinaus getan. Ich frage mich, ob es ein Problem mit dem Python 3.5-Download für Mac auf python.org gibt. Dies war so ziemlich eine saubere Installation für dieses Projekt. Auf jeden Fall hilft dies vielleicht jemand anderem, wenn er auf so etwas stößt.
Nochmals vielen Dank!
Ah, das sieht nach einem richtigen Request-Bug aus. Urllib3 hat einen nicht-relativen Import in seiner Codebasis, der bricht, wenn wir es verkaufen! Wir sollten versuchen, das zu beheben.
@eoco Während wir also diesen Fix durch die Pipeline ausführen (siehe shazow/urllib3#901), besteht Ihre einfachste Lösung darin, Python 3 mit etwas wie Homebrew zu installieren. Dadurch wird Ihr Python 3 mit einem viel neueren OpenSSL verknüpft, das dieses Problem sowohl in Anfragen als auch in jeder anderen Anwendung, die die TLS-Bindungen des Systems verwendet, für Sie löst.
Ich habs. Die Installation von urllib3 scheint mein Problem gelöst zu haben, aber ich kann das einfach tun. Entschuldigung für eventuelle Verwirrungen, die dadurch entstanden sein könnten.
Dankeschön!
Ich bin auf den gleichen Fehler gestoßen, NACHDEM ich zu aws gewechselt und die App hinter einen elastischen Loadbalancer gestellt habe, der noch nie zuvor aufgetreten ist.
Ich habe auch urllib3 installiert.
Gibt es Hoffnung für die Installation von pyopenssl? Ich habe es versucht und es gab viele C-Level-Fehler (die möglicherweise auf fehlende Teile in meinem Docker-Image zurückzuführen sind).
[2016-06-29 02:27:59,932: CRITICAL/MainProcess] Task ventures.tasks.cache_warmup[ae2c97eb-3b28-4896-8d0f-42f712115707] INTERNAL ERROR: SSLError(SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:645)'),),)
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/celery/app/trace.py", line 253, in trace_task
I, R, state, retval = on_error(task_request, exc, uuid)
File "/usr/local/lib/python3.5/dist-packages/celery/app/trace.py", line 201, in on_error
R = I.handle_error_state(task, eager=eager)
File "/usr/local/lib/python3.5/dist-packages/celery/app/trace.py", line 85, in handle_error_state
}[self.state](task, store_errors=store_errors)
File "/usr/local/lib/python3.5/dist-packages/celery/app/trace.py", line 125, in handle_failure
einfo=einfo)
File "/usr/local/lib/python3.5/dist-packages/celery/utils/dispatch/signal.py", line 166, in send
response = receiver(signal=self, sender=sender, **named)
File "/srv/core/celery.py", line 31, in notify_task_failure
""".format(sender, exception, args, kwargs))
File "/usr/lib/python3.5/logging/__init__.py", line 1308, in error
self._log(ERROR, msg, args, **kwargs)
File "/usr/lib/python3.5/logging/__init__.py", line 1415, in _log
self.handle(record)
File "/usr/lib/python3.5/logging/__init__.py", line 1425, in handle
self.callHandlers(record)
File "/usr/lib/python3.5/logging/__init__.py", line 1487, in callHandlers
hdlr.handle(record)
File "/usr/lib/python3.5/logging/__init__.py", line 855, in handle
self.emit(record)
File "/srv/core/management/logger/slack.py", line 28, in emit
notify_slack(message, channel)
File "/usr/local/lib/python3.5/dist-packages/celery/local.py", line 188, in __call__
return self._get_current_object()(*a, **kw)
File "/usr/local/lib/python3.5/dist-packages/celery/app/trace.py", line 439, in __protected_call__
return orig(self, *args, **kwargs)
File "/usr/local/lib/python3.5/dist-packages/celery/app/task.py", line 420, in __call__
return self.run(*args, **kwargs)
File "/srv/core/tasks.py", line 66, in notify_slack
data=json.dumps(payload), headers={'Content-Type': 'application/json'}
File "/usr/local/lib/python3.5/dist-packages/requests/api.py", line 107, in post
return request('post', url, data=data, json=json, **kwargs)
File "/usr/local/lib/python3.5/dist-packages/requests/api.py", line 53, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/local/lib/python3.5/dist-packages/requests/sessions.py", line 468, in request
resp = self.send(prep, **send_kwargs)
File "/usr/local/lib/python3.5/dist-packages/requests/sessions.py", line 576, in send
r = adapter.send(request, **kwargs)
File "/usr/local/lib/python3.5/dist-packages/requests/adapters.py", line 447, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:645)
pip freeze:
amqp==1.4.9
analytics-python==1.1.0
anyjson==0.3.3
beautifulsoup4==4.4.1
billiard==3.3.0.23
bleach==1.4.2
boto==2.39.0
celery==3.1.23
Django==1.8.13
django-appconf==1.0.2
django-compressor==2.0
django-countries==3.4.1
django-filter==0.13.0
django-haystack==2.5.dev0
django-htmlmin==0.9.0
django-modelcluster==1.1
django-overextends==0.4.1
django-redis==4.3.0
django-rest-swagger==0.3.5
django-storages-redux==1.3.2
django-taggit==0.18.3
django-treebeard==4.0.1
djangorestframework==3.3.3
docopt==0.4.0
docutils==0.12
drf-extensions==0.2.8
dropbox==4.0
elasticsearch==1.8.0
et-xmlfile==1.0.1
geopy==1.11.0
google-api-python-client==1.5.0
gunicorn==19.4.5
hiredis==0.2.0
html5lib==0.9999999
httplib2==0.9.2
jdcal==1.2
jsonfield==1.0.3
kombu==3.0.35
mandrill==1.0.57
Markdown==2.6.5
mock==1.0.1
numpy==1.11.0
oauth2client==2.2.0
openpyxl==2.3.4
Pillow==3.1.1
psycopg2==2.6.1
pyasn1==0.1.9
pyasn1-modules==0.0.8
pycurl==7.43.0
pygobject==3.20.0
PyMySQL==0.7.2
python-apt==1.1.0b1
python-dateutil==2.5.3
pytz==2016.4
PyYAML==3.11
rcssmin==1.0.6
redis==2.10.5
requests==2.9.1
rjsmin==1.0.12
rsa==3.4.2
simplejson==3.8.2
six==1.10.0
sphinx-me==0.3
unattended-upgrades==0.1
Unidecode==0.4.19
uritemplate==0.6
urllib3==1.16
wagtail==1.4.5
Willow==0.3.1
python3 -c "from requests.packages.urllib3.contrib import pyopenssl; pyopenssl.inject_into_urllib3()"
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/local/lib/python3.5/dist-packages/requests/packages/urllib3/contrib/pyopenssl.py", line 49, in <module>
from ndg.httpsclient.ssl_peer_verification import SUBJ_ALT_NAME_SUPPORT
ImportError: No module named 'ndg'
@shredding Versuchen Sie, pyopenssl, ndg-httpsclient und pyasn1 zu installieren. Sie brauchen jetzt alle drei.
Okay, ich werde es versuchen (ich kann das nur auf aws reproduzieren und berichten).
Für diejenigen, die Python3 innerhalb eines ubuntu:latest
Pakets auf Docker ausführen, müssen Sie Folgendes hinzufügen:
RUN apt-get install build-essentials python-dev libffi
vor dem Hinzufügen
pyOpenSSL==16.0.0
ndg-httpsclient==0.4.1
pyasn1==0.1.9
... nach Ihren Anforderungen.txt
Habe das gleiche Problem hier.
Behoben durch die Installation von pyopenssl, ndg-httpsclient, pyasn1 und natürlich urllib3.
Auch auf meiner Seite trete ich nicht wieder auf.
Ich habe versucht, mich mit der Twitter-API zu verbinden, also habe ich zuerst die folgende Fehlermeldung erhalten
requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:645)
Ich habe Monkey Patch verwendet und aber Letter Money Patch hat nicht funktioniert, ich habe pyOpenSSL ,ndg-httpsclient, pyasn1 installiert und irgendwie hat das funktioniert.
Aber danach habe ich das bekommen
Traceback (most recent call last):
File "twitter_friend.py", line 32, in <module>
stream.statuses.filter(follow='sajjkum')
File "C:\Python27\lib\site-packages\twython\streaming\types.py", line 66, in filter
self.streamer._request(url, 'POST', params=params)
File "C:\Python27\lib\site-packages\twython\streaming\api.py", line 139, in _request
response = _send(retry_counter)
File "C:\Python27\lib\site-packages\twython\streaming\api.py", line 123, in _send
response = func(url, **requests_args)
File "C:\Python27\lib\site-packages\requests\sessions.py", line 511, in post
return self.request('POST', url, data=data, json=json, **kwargs)
File "C:\Python27\lib\site-packages\requests\sessions.py", line 468, in request
resp = self.send(prep, **send_kwargs)
File "C:\Python27\lib\site-packages\requests\sessions.py", line 576, in send
r = adapter.send(request, **kwargs)
File "C:\Python27\lib\site-packages\requests\adapters.py", line 426, in send
raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', BadStatusLine("''",))
und das
Traceback (most recent call last):
File "twitter_friend.py", line 32, in <module>
stream.statuses.filter(follow='sajjkum')
File "C:\Python27\lib\site-packages\twython\streaming\types.py", line 66, in filter
self.streamer._request(url, 'POST', params=params)
File "C:\Python27\lib\site-packages\twython\streaming\api.py", line 139, in _request
response = _send(retry_counter)
File "C:\Python27\lib\site-packages\twython\streaming\api.py", line 123, in _send
response = func(url, **requests_args)
File "C:\Python27\lib\site-packages\requests\sessions.py", line 511, in post
return self.request('POST', url, data=data, json=json, **kwargs)
File "C:\Python27\lib\site-packages\requests\sessions.py", line 468, in request
resp = self.send(prep, **send_kwargs)
File "C:\Python27\lib\site-packages\requests\sessions.py", line 576, in send
r = adapter.send(request, **kwargs)
File "C:\Python27\lib\site-packages\requests\adapters.py", line 447, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: bad handshake: SysCallError(-1, 'Unexpected EOF')
Ich verwende Python 2.7 , urllib3 (1.4), Anfragen (2.9.1).
Beide Fehler deuten darauf hin, dass der Remoteserver Ihre Anfrage nicht akzeptiert. Es ist uns jedoch nicht wirklich möglich, diesen Fehler zu diagnostizieren. Ich empfehle Ihnen, Ihr OpenSSL zu aktualisieren und es erneut zu versuchen.
pip install --force-reinstall requests[security]
es für mich gelöst.
Ich erhalte die gleiche Ausnahme, nachdem ich jede oben erwähnte Lösung ausprobiert habe. Fehler-Trace:
Datei "/home/prateek/.local/lib/python2.7/site-packages/requests/sessions.py", Zeile 488, in request
resp = self.send(prep, *send_kwargs)Datei "/home/prateek/.local/lib/python2.7/site-packages/requests/sessions.py", Zeile 609, in sendr = adapter.send(Anfrage, * kwargs)
Datei "/home/prateek/.local/lib/python2.7/site-packages/requests/adapters.py", Zeile 497, in send
SSLError auslösen (e, request=request)
Requests.Exceptions.SSLError: ("schlechter Handshake: SysCallError(-1, 'Unexpected EOF')",)
Informationen zum Systempaket:
cffi==1.9.1
Kryptographie==1.6
idna==2.1
ndg-httpsclient==0.4.2
pkg-Ressourcen==0.0.0
pyasn1==0.1.9
pycparser==2.17
pyOpenSSL==16.2.0
Anfragen==2.12.3
sechs==1.10.0
Python: Python 3.5.2 (Standard, 5. Juli 2016, 12:43:10)
Betriebssystem: Ubuntu 16.04
OpenSSL 1.0.2g 1. März 2016
Schätzen Sie Ihre Hilfe in dieser Angelegenheit.
Dies bedeutet mit ziemlicher Sicherheit, dass die der Gegenstelle angebotenen Verschlüsselungen nicht akzeptabel sind. Wenn Sie openssl s_client -connect <host>:<port>
für die Website verwenden, die Sie kontaktieren möchten, können Sie mir die Ausgabe mitteilen? (Bitte stellen Sie sicher, dass Sie dies mit dem von Ihnen verwendeten OpenSSL 1.0.2g tun).
@Lukasa Danke für deine schnelle Antwort. Die von Ihnen angeforderte Ausgabe lautet wie folgt:
Außerdem füge ich die Antwort von OpenSSL 1.0.1f vom 6. Januar 2014 hinzu
An dieser Version scheint es zu funktionieren.
@> openssl version
OpenSSL 1.0.2g 1 Mar 2016
@> openssl s_client -connect <host>:<port>
CONNECTED(00000003)
140401805448856:error:140790E5:SSL routines:ssl23_write:ssl handshake failure:s23_lib.c:177:
no peer certificate available
No client certificate CA names sent
SSL handshake has read 0 bytes and written 305 bytes
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : 0000
Session-ID:
Session-ID-ctx:
Master-Key:
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1480703355
Timeout : 300 (sec)
Ich habe es auch mit einer früheren Version von openssl versucht und es scheint zu funktionieren:
@> openssl version
OpenSSL 1.0.1f 6 Jan 2014
@> openssl s_client -connect <server>:<host>
CONNECTED(00000003)
depth=0 C = US, ST = California, O = Internet Widgits Pty Ltd
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 C = US, ST = California, O = Internet Widgits Pty Ltd
verify error:num=27:certificate not trusted
verify return:1
depth=0 C = US, ST = California, O = Internet Widgits Pty Ltd
verify error:num=21:unable to verify the first certificate
verify return:1
Certificate chain
0 s:/C=US/ST=California/O=Internet Widgits Pty Ltd
i:/C=US/ST=California/O=Internet Widgits Pty Ltd/CN=John Smith
Server certificate
BEGIN CERTIFICATE
<certificate>
END CERTIFICATE
subject=/C=US/ST=California/O=Internet Widgits Pty Ltd
issuer=/C=US/ST=California/O=Internet Widgits Pty Ltd/CN=<Name>
No client certificate CA names sent
SSL handshake has read 2120 bytes and written 477 bytes
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-SHA384
Server public key is 4096 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES256-SHA384
Session-ID: C7AEA448B9E21C30D90D1377904426A9D1A21971785D547378CA07ACDAC00161
Session-ID-ctx:
Master-Key: C5B31E9D7A59EF4E6A2657E9F55A64B89F4AE3BBDFD864ADD1087449AA927D9C1655A76E44C3E30FF2301DB00C1CB2F7
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1480703425
Timeout : 300 (sec)
Verify return code: 21 (unable to verify the first certificate)
Es sieht also so aus, als hätte Ihr Server einen ziemlich heftigen Einwand gegen etwas in Ihrem OpenSSL 1.0.2-Handshake. Kennen Sie tcpdump oder Wireshark? Wenn ja, wäre es wirklich hilfreich, wenn Sie eine Paketerfassung der beiden Handshakes machen und mir diese zur Verfügung stellen könnten.
Gleiches Problem hier mit www.celestrak.com
pip freeze --local
[...] Omitting other packages
cffi==1.9.1
cryptography==1.7.1
idna==2.2
ipaddress==1.0.17
ndg-httpsclient==0.4.2
numpy==1.11.3
pyasn1==0.1.9
pyOpenSSL==16.2.0
requests==2.12.4
scandir==1.4
openssl s_client -connect www.celestrak.com:443
CONNECTED(00000003)
140736264172552:error:140790E5:SSL routines:ssl23_write:ssl handshake failure:s23_lib.c:177:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 308 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : 0000
Session-ID:
Session-ID-ctx:
Master-Key:
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1483987800
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
openssl version
OpenSSL 1.0.2j 26 Sep 2016
Ich verwende das Update (die vor arbeiten) vorgeschlagen hier .
class CustomAdapter(requests.adapters.HTTPAdapter):
''' See: http://stackoverflow.com/a/14146031/1334711 '''
def init_poolmanager(self, connections, maxsize, block=False):
self.poolmanager = requests.packages.urllib3.poolmanager.PoolManager(
num_pools=connections,
maxsize=maxsize,
block=block,
ssl_version=ssl.PROTOCOL_TLSv1)
# Other code
if url_parse.scheme in ('http', 'https'):
# It's a URL, get from Internet
try:
tle_file = requests.get(source).text
except requests.exceptions.SSLError:
pytest.set_trace()
s = requests.Session()
s.mount('https://', CustomAdapter())
tle_file = s.get(source).text
Python v.2.7.13
Betriebssystem: macOS 10.12.2
Der Fehler, den ich erhalte, ist:
SSLError: ("bad handshake: SysCallError(-1, 'Unexpected EOF')",)
@rubendibattista www.celestrack.com hat eine schreckliche TLS-Konfiguration, wie Sie hier sehen können . Dies bedeutet, dass moderne Versionen von Requests keine der vom Server verwendeten Verschlüsselungssammlungen unterstützen, da sie alle schwach und defekt sind.
Zunächst empfehle ich, diesen Server überhaupt nicht zu kontaktieren. Wenn das nicht möglich ist, können Sie den Standard Chiffriersätze ändern , indem etwas zu tun , wie diese .
@Lukasa Danke für deine Unterstützung. Ich habe den Administrator der Site kontaktiert, um zu berichten, was Sie sagen, und zu versuchen, eine bessere Lösung zu finden, als die von Ihnen vorgeschlagene Problemumgehung zu verwenden.
Hallo Leute! Habe diese Fehler auch. Die Verwendung von Python3 und die Installation der Combo (pyopenssl ndg-httpsclient pyasn1 urllib3) hat den Zweck erfüllt. Aber ich werde neugierig, wie sich Python2.7 unter OS X und Ubuntu verhalten hat:
Fehler
Traceback (most recent call last):
File "loanpro_doc_uploader.py", line 113, in <module>
run()
File "loanpro_doc_uploader.py", line 109, in run
loanpro = LoanPro(args.env, args.folder)
File "loanpro_doc_uploader.py", line 36, in __init__
self.get_all_customforms_data()
File "loanpro_doc_uploader.py", line 69, in get_all_customforms_data
resp = requests.get(url, headers=headers)
File "/Users/vyscond/Projects/razorvision/loan-documents/env/lib/python2.7/site-packages/requests/api.py", line 55, in get
return request('get', url, **kwargs)
File "/Users/vyscond/Projects/razorvision/loan-documents/env/lib/python2.7/site-packages/requests/api.py", line 44, in request
return session.request(method=method, url=url, **kwargs)
File "/Users/vyscond/Projects/razorvision/loan-documents/env/lib/python2.7/site-packages/requests/sessions.py", line 456, in request
resp = self.send(prep, **send_kwargs)
File "/Users/vyscond/Projects/razorvision/loan-documents/env/lib/python2.7/site-packages/requests/sessions.py", line 559, in send
r = adapter.send(request, **kwargs)
File "/Users/vyscond/Projects/razorvision/loan-documents/env/lib/python2.7/site-packages/requests/adapters.py", line 382, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:590)
Fehler
Traceback (most recent call last):
File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/packages/urllib3/connectionpool.py", line 594, in urlopen
chunked=chunked)
File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/packages/urllib3/connectionpool.py", line 350, in _make_request
self._validate_conn(conn)
File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/packages/urllib3/connectionpool.py", line 835, in _validate_conn
conn.connect()
File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/packages/urllib3/connection.py", line 323, in connect
ssl_context=context)
File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/packages/urllib3/util/ssl_.py", line 324, in ssl_wrap_socket
return context.wrap_socket(sock, server_hostname=server_hostname)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/ssl.py", line 365, in wrap_socket
_context=self)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/ssl.py", line 583, in __init__
self.do_handshake()
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/ssl.py", line 810, in do_handshake
self._sslobj.do_handshake()
ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:600)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/adapters.py", line 423, in send
timeout=timeout
File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/packages/urllib3/connectionpool.py", line 624, in urlopen
raise SSLError(e)
requests.packages.urllib3.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:600)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "loanpro_doc_uploader.py", line 113, in <module>
run()
File "loanpro_doc_uploader.py", line 109, in run
loanpro = LoanPro(args.env, args.folder)
File "loanpro_doc_uploader.py", line 36, in __init__
self.get_all_customforms_data()
File "loanpro_doc_uploader.py", line 69, in get_all_customforms_data
resp = requests.get(url, headers=headers)
File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/api.py", line 70, in get
return request('get', url, params=params, **kwargs)
File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/api.py", line 56, in request
return session.request(method=method, url=url, **kwargs)
File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/sessions.py", line 488, in request
resp = self.send(prep, **send_kwargs)
File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/sessions.py", line 609, in send
r = adapter.send(request, **kwargs)
File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/adapters.py", line 497, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:600)
Fehler ist weg
Fehler ist weg
Der Fehler ist unklar, liegt aber höchstwahrscheinlich an Ihrer OpenSSL-Version. Ihre Behauptung, dass Ubuntu 14.04 kein OpenSSL hat, kann einfach
Hallo!
Ich habe ein Problem mit einigen https-Sites und einer Anfragebibliothek.
Website: https://ndmc.gov.in/vacancy.aspx
Eingerichtet:
appdirs==1.4.0
cffi==1.9.1
Kryptographie==1.7.2
idna==2.2
ndg-httpsclient==0.4.2
Verpackung==16.8
pyasn1==0.1.9
pycparser==2.17
pyOpenSSL==16.2.0
pyparsing==2.1.10
Anfragen==2.13.0
sechs==1.10.0
urllib3==1.20
OpenSSL 1.0.2k 26. Januar 2017
bekomme einen Fehler: request.exceptions.SSLError: ("schlechter Handshake: SysCallError(-1, 'Unexpected EOF')",)
Betriebssystem: Archbang Linux, neuestes
Python 3.6 & Python 2.7 - gleicher Fehler
Sie sind eine weitere Person, die unseren Wettbewerb gewinnt, wer versuchen kann, den schlechtesten HTTPS-Server der Welt zu kontaktieren . Dieser Server ist schrecklich konfiguriert, er ist völlig unsicher. Der Grund , warum dieses Problem bei Ihnen zu begegnen ist , weil Anfragen nicht mehr unterstützt keines des Chiffriersätze Dieses Server unterstützt , weil sie alle entweder schwach oder unsicher sind. Zunächst empfehle ich Ihnen, jemanden unter Druck zu setzen, den Server zu reparieren, aber wenn Sie ihn wirklich kontaktieren müssen, können Sie 3DES wie folgt erneut hinzufügen.
@vyscond hat mir das Leben gerettet. Egal was ich auf meinem OSX gemacht habe, es verschwand erst bei der Installation von pyopenssl ndg-httpsclient pyasn1 urllib3
. Vielleicht sollte es als Abhängigkeiten für die OSX-Installation von requests
hinzugefügt werden?
Es ist nur bei einigen Konfigurationen von OS X und Python nützlich. Das Endergebnis ist, dass sie optional bleiben.
Ich frage mich, wie viel Zeit die Leute verbringen, bevor sie (vielleicht) die Lösung für dieses Problem finden. Ich musste viel durcharbeiten, um diesen Thread zu finden und durchzugehen. Lohnt es sich?
Kommt darauf an. Es können Probleme entstehen, wenn auch diese Abhängigkeiten erforderlich sind, nicht zuletzt, weil es Ihrem System ein neues OpenSSL hinzufügt, das separat versioniert und verwaltet wird.
@Lukasa aus irgendeinem Grund habe ich mein Setup zum Laufen gebracht, scheint pyopenssl (installiert über Requests[security] die an einige Anfragen angehängten Zertifikate durcheinander zu bringen.
Ich musste das Paket pyopenssl deinstallieren, um Anfragen zur Verwendung von OpenSSL in urllib3 zu erzwingen.
Dies geschieht bei der Verwendung von adal (https://github.com/AzureAD/azure-activedirectory-library-for-python), was bei einigen alten Versionen von Anforderungen (die die Zertifikate unterstützen) grundsätzlich nicht funktioniert.
Kommt mir aber ein bisschen nach Voodoo vor.
Ich hatte dieses Problem unter Mac OSX Sierra v 10.12.0. Habe alles in diesem Thread versucht, hat nicht funktioniert. Schließlich habe ich mein Betriebssystem auf v10.12.6 aktualisiert und das Problem war verschwunden.
Der Fehler kann auch auftreten, wenn Python-Requests verwendet werden, um einen API-Aufruf an eine Site zu tätigen, die sich hinter einem VPN befindet, und dieser VPN-Tunnel ist in diesem Moment nicht verfügbar.
Hallo Leute!
Ich bin selbst ein bisschen neu in Bezug auf Anfragen und habe diesen Fehler beim Ausführen eines POC mit Anfragen festgestellt, um zu sehen, ob es meine Anforderungen an die Einhaltung der allgemeinen Kriterien erfüllen kann. Ich habe versucht, meinen Requests-POC mit diesem Tool zu verbinden. Ich schaue mir speziell die Testfälle für FIA-X509 Ext 1.1 an, aber das habe ich erhalten:
Traceback (letzter Anruf zuletzt):
Datei "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connectionpool.py", Zeile 601, in urlopen
stückig = stückig)
Datei "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connectionpool.py", Zeile 346, in _make_request
self._validate_conn(conn)
Datei "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connectionpool.py", Zeile 850, in _validate_conn
conn.connect()
Datei "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connection.py", Zeile 326, in connect
ssl_context=Kontext)
Datei "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/util/ssl_.py", Zeile 329, in ssl_wrap_socket
return context.wrap_socket(sock, server_hostname=server_hostname)
Datei "/usr/lib/python3.6/ssl.py", Zeile 407, in wrap_socket
_context=selbst, _session=session)
Datei "/usr/lib/python3.6/ssl.py", Zeile 814, in __init__
self.do_handshake()
Datei "/usr/lib/python3.6/ssl.py", Zeile 1068, in do_handshake
self._sslobj.do_handshake()
Datei "/usr/lib/python3.6/ssl.py", Zeile 689, in do_handshake
self._sslobj.do_handshake()
ssl.SSLEOFError: EOF ist unter Verletzung des Protokolls aufgetreten (_ssl.c:777)Während der Behandlung der obigen Ausnahme ist eine weitere Ausnahme aufgetreten:
Traceback (letzter Anruf zuletzt):
Datei "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/requests/adapters.py", Zeile 440, in send
Zeitüberschreitung = Zeitüberschreitung
Datei "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connectionpool.py", Zeile 639, in urlopen
_stacktrace=sys.exc_info()[2])
Datei "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/util/retry.py", Zeile 388, inkrementell
raise MaxRetryError(_pool, url, error oder ResponseError(cause))
urllib3.Exceptions.MaxRetryError: HTTPSConnectionPool(host='10.0.0.221', port=443): Max. Wiederholungen überschritten mit URL: / (Caused by SSLError(SSLEOFError(8, 'EOF trat unter Verletzung des Protokolls auf (_ssl.c:777 )'),))Während der Behandlung der obigen Ausnahme ist eine weitere Ausnahme aufgetreten:
Traceback (letzter Anruf zuletzt):
Datei "req.py", Zeile 91, in
r = session.request('GET', 'https://10.0.0.221', verify=True)
Datei "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/requests/sessions.py", Zeile 508, in Anfrage
resp = self.send(prep, *send_kwargs)Datei "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/requests/sessions.py", Zeile 618, in sendr = adapter.send(Anfrage, * kwargs)
Datei "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/requests/adapters.py", Zeile 506, in send
SSLError auslösen (e, request=request)
Requests.Exceptions.SSLError: HTTPSConnectionPool(host='10.0.0.221', port=443): Max. Wiederholungen überschritten mit URL: / (Caused by SSLError(SSLEOFError(8, 'EOF trat unter Verletzung des Protokolls auf (_ssl.c:777 )'),))
Dies ist der POC-Code, den ich verwende:
import ssl
import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.poolmanager import PoolManager
from requests.packages.urllib3.util import ssl_
CIPHERS = (
'RSA+AES'
)
class TlsAdapter(HTTPAdapter):
def __init__(self, ssl_options=0, **kwargs):
self.ssl_options = ssl_options
super(TlsAdapter, self).__init__(**kwargs)
def init_poolmanager(self, *pool_args, **pool_kwargs):
ctx = ssl_.create_urllib3_context(ciphers=CIPHERS, cert_reqs=ssl.CERT_REQUIRED, options=self.ssl_options)
self.poolmanager = PoolManager(*pool_args,
ssl_context=ctx,
**pool_kwargs)
session = requests.session()
adapter = TlsAdapter(ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1)
session.mount("https://", adapter)
r = session.request('GET', 'https://10.0.0.221', verify=True)
print(r)
wobei 10.0.0.221 der Ort ist, an dem ich das Tool zur Überprüfung platziert habe.
Ich bin mir nicht ganz sicher, warum dieser Fehler auftritt. Ich habe versucht, diesen Thread sowie mehrere andere Fragen zu Stackoverflow durchzugehen, konnte aber keine geeignete Lösung finden.
Ich gebe zu, dass ich zu diesem Zeitpunkt auch kein klares Verständnis des TLS-Protokolls habe. Also, wenn mir jemand helfen könnte, was hier das Problem ist, wäre ich dankbar.
Bitte lassen Sie mich wissen, wenn ich etwas übersehen habe oder zusätzliche Informationen benötigen. Vielen Dank!
Genau als FYI tritt dieser Fehler auch auf, wenn SSL auf dem Server, zu dem Sie eine Verbindung herstellen, nicht aktiviert ist.
Hilfreichster Kommentar
@the-efi Hast du
pyopenssl
,pyasn1
undndg-httpsclient
installiert?