Requests: SSLError: EOF ist unter Verletzung des Protokolls aufgetreten (_ssl.c:590)

Erstellt am 9. Juli 2016  ·  6Kommentare  ·  Quelle: psf/requests

Bitte haben Sie Verständnis, da ich mit Python und Github im Allgemeinen ziemlich neu bin.

Ich habe Anfragen zum Scrapen von Daten aus dem Play Store verwendet. Ich muss eine große Anzahl von Anfragen stellen (ca. 20k). Es funktioniert hervorragend für etwa 3000-4000 Anfragen, bleibt aber danach hängen (SSL-Fehler). Ich bin mit SSL und Anfragen nicht vertraut, daher weiß ich nicht, was dies verursacht.

Fehler:

(SSLError                                  Traceback (most recent call last)
<ipython-input-23-1da544640d89> in <module>()
     53         time.sleep(0.1)
     54 
---> 55         r = requests.get('https://play.google.com' + link + '&hl=en')
     56         link_tree = html.fromstring(r.content)
     57         description = link_tree.xpath('//div[@jsname="C4s9Ed"]/text()') + link_tree.xpath('//div[@jsname="C4s9Ed"]/p/text()')

C:\Users\Nathan\AppData\Local\Enthought\Canopy\User\lib\site-packages\requests\api.pyc in get(url, params, **kwargs)
     65 
     66     kwargs.setdefault('allow_redirects', True)
---> 67     return request('get', url, params=params, **kwargs)
     68 
     69 

C:\Users\Nathan\AppData\Local\Enthought\Canopy\User\lib\site-packages\requests\api.pyc in request(method, url, **kwargs)
     51     # cases, and look like a memory leak in others.
     52     with sessions.Session() as session:
---> 53         return session.request(method=method, url=url, **kwargs)
     54 
     55 

C:\Users\Nathan\AppData\Local\Enthought\Canopy\User\lib\site-packages\requests\sessions.pyc in request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)
    466         }
    467         send_kwargs.update(settings)
--> 468         resp = self.send(prep, **send_kwargs)
    469 
    470         return resp

C:\Users\Nathan\AppData\Local\Enthought\Canopy\User\lib\site-packages\requests\sessions.pyc in send(self, request, **kwargs)
    574 
    575         # Send the request
--> 576         r = adapter.send(request, **kwargs)
    577 
    578         # Total elapsed time of the request (approximately)

C:\Users\Nathan\AppData\Local\Enthought\Canopy\User\lib\site-packages\requests\adapters.pyc in send(self, request, stream, timeout, verify, cert, proxies)
    445         except (_SSLError, _HTTPError) as e:
    446             if isinstance(e, _SSLError):
--> 447                 raise SSLError(e, request=request)
    448             elif isinstance(e, ReadTimeoutError):
    449                 raise ReadTimeout(e, request=request)

SSLError: EOF occurred in violation of protocol (_ssl.c:590) )

The-efi auf diesem Github schien in diesem Thread das gleiche Problem zu haben: https://github.com/kennethreitz/requests/issues/3006 (siehe unten, er war nicht das OP), aber ich konnte es nicht finden den Thread öffnete er für weitere Hilfe. Ich verwende Python 2.7. sowie.

Ich stecke schon seit einiger Zeit daran fest und kann weder hier noch StackOverflow eine Antwort finden (die Antwort lag wahrscheinlich direkt vor meiner Nase, aber ich hatte Probleme, sie zu verstehen, weil ich nicht über SSL und Anfragen Bescheid wusste) .

Vielen Dank im Voraus für Ihre Hilfe und Entschuldigung, wenn etwas unklar ist - lassen Sie es mich bitte wissen.

Hilfreichster Kommentar

Ich hatte genau die gleiche Fehlermeldung, das Problem war, dass ich den ndg-httpsclient nicht installiert hatte

https://github.com/kennethreitz/requests/issues/3605

Alle 6 Kommentare

Wenn Sie sagen, dass Sie stecken bleiben, wird dann nur die Ausnahme ausgelöst? Oder funktionieren Folgeanfragen nicht? Ich frage, weil vorübergehende Netzwerkfehler _do_ auftreten, und wenn Sie eine große Anzahl von Webanfragen stellen, sollten Sie eine Art Wiederholungslogik implementieren.

Die Ausnahme feuert. Folgeanfragen scheinen zu funktionieren, aber ich habe noch nicht versucht, einen Wiederholungsversuch zu implementieren. Ich hatte Angst, dass ich gegen die Regeln verstoße, zu viele Anfragen an einen Server zu stellen oder so, denke ich.

Ich werde das auf jeden Fall versuchen und diesen Thread aktualisieren. Vielen Dank!

Nun, für das, was es wert ist, weil Sie requests.* , setzen Sie sich einem größeren Risiko aus, die Netzwerkressourcen zwischen Ihnen und dem Server zu überlasten. Sie sollten versuchen, eine Sitzung zu verwenden .

Für alle mit diesem Problem:

Ich habe es behoben, indem ich den Vorschlägen von

import requests
sess = requests.Session()
adapter = requests.adapters.HTTPAdapter(max_retries = 20)
sess.mount('http://', adapter)

Dann, wo ich vorher requests.get() , habe ich sess.get() .

Hoffentlich hilft das und danke für deine Hilfe @Lukasa !

Ich hatte genau die gleiche Fehlermeldung, das Problem war, dass ich den ndg-httpsclient nicht installiert hatte

https://github.com/kennethreitz/requests/issues/3605

@variable Ich habe ndg-httpsclient installiert, aber der gleiche Fehler: urllib.error.URLError :

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen