Requests: SSLError : EOF s'est produit en violation du protocole (_ssl.c:590)

Créé le 9 juil. 2016  ·  6Commentaires  ·  Source: psf/requests

Veuillez me supporter car je suis assez nouveau avec Python et github en général.

J'ai utilisé des requêtes pour extraire des données du Play Store. J'ai besoin de faire un grand nombre de requêtes (environ 20k). Cela fonctionne très bien pour environ 3000-4000 requêtes mais reste bloqué après cela (erreur SSL). Je ne connais pas SSL et les requêtes, donc je ne sais pas ce qui cause cela.

Erreur:

(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, sur ce github, semblait avoir le même problème sur ce fil : https://github.com/kennethreitz/requests/issues/3006 (voir ci-dessous, il n'était pas l'OP) mais je n'ai pas pu trouver le fil qu'il a ouvert pour obtenir de l'aide. J'utilise Python 2.7. également.

Je suis bloqué là-dessus depuis un bon moment maintenant et je ne trouve aucune réponse ici ni StackOverflow (la réponse était probablement juste sous mon nez mais j'ai eu du mal à les comprendre à cause de mon manque de connaissances en SSL et requêtes) .

Merci d'avance pour votre aide, et désolé si quelque chose n'est pas clair -- s'il vous plaît faites le moi savoir.

Commentaire le plus utile

J'ai eu exactement le même message d'erreur, le problème était que je n'avais pas installé ndg-httpsclient

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

Tous les 6 commentaires

Lorsque vous dites que vous êtes bloqué, est-ce simplement que l'exception se déclenche ? Ou les demandes de suivi ne fonctionnent-elles pas ? Je demande parce que des erreurs de réseau transitoires se produisent, et si vous effectuez un grand nombre de requêtes Web, vous devriez envisager de mettre en œuvre une sorte de logique de nouvelle tentative face à celles-ci.

L'exception se déclenche. Les demandes de suivi semblent fonctionner, mais je n'ai pas encore essayé de réessayer. J'avais peur d'être contre les règles de faire trop de demandes à un serveur ou quelque chose, je suppose.

Je vais certainement essayer et mettre à jour ce fil. Merci!

Eh bien, pour ce que ça vaut, parce que vous utilisez requests.* vous vous exposez davantage au risque de surcharger les ressources réseau entre vous et le serveur. Vous devriez essayer d'utiliser une session .

Pour toute personne ayant ce problème :

Je l'ai corrigé en suivant les suggestions de @Lukasa et

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

Ensuite, là où j'utilisais requests.get() auparavant, j'utilisais sess.get() .

J'espère que cela aide, et merci pour votre aide @Lukasa !

J'ai eu exactement le même message d'erreur, le problème était que je n'avais pas installé ndg-httpsclient

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

@variable J'ai installé ndg-httpsclient mais la même erreur : urllib.error.URLError :

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

ghtyrant picture ghtyrant  ·  3Commentaires

JimHokanson picture JimHokanson  ·  3Commentaires

eromoe picture eromoe  ·  3Commentaires

brainwane picture brainwane  ·  3Commentaires

remram44 picture remram44  ·  4Commentaires