Requests: SSLError:プロトコルに違反してEOFが発生しました(_ssl.c:590)

作成日 2016年07月09日  ·  6コメント  ·  ソース: psf/requests

私はPythonとgithub全般にまったく慣れていないので、ご容赦ください。

Playストアからデータをスクレイピングするリクエストを使用しています。 大量のリクエスト(約20k)を行う必要があります。 約3000〜4000のリクエストには最適ですが、その後スタックします(SSLエラー)。 私はSSLとリクエストに精通していないので、これの原因がわかりません。

エラー:

(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) )

このgithubの-efiは、このスレッドでも同じ問題を抱えているようです: https

私はかなり長い間これに固執していて、ここでも答えも見つかりません(答えはおそらく私の目の前にありましたが、SSLとリクエストの知識が不足しているために理解するのに苦労しました) 。

よろしくお願いします。不明な点がある場合は申し訳ありません。お知らせください。

最も参考になるコメント

まったく同じエラーメッセージが表示されました。問題は、ndg-httpsclientがインストールされていないことでした。

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

全てのコメント6件

あなたが立ち往生していると言うとき、それは例外が発火するだけですか? または、フォローアップリクエストが機能しませんか? 一時的なネットワークエラーが発生するため、質問します。多数のWebリクエストを行う場合は、それらに直面して何らかの再試行ロジックを実装することを検討する必要があります。

例外が発生します。 フォローアップリクエストは機能しているようですが、まだ再試行を実装しようとはしていません。 サーバーなどにリクエストが多すぎるというルールに反しているのではないかと心配していました。

私は間違いなくそれを試して、このスレッドを更新します。 ありがとう!

requests.*を使用しているため、自分とサーバー間のネットワークリソースが過負荷になるリスクが高くなります。 セッションを使用し

この問題を抱えている人のために:

@Lukasaの提案に従って修正し、リクエストをインポートした直後にこれを追加しました。

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

次に、以前はrequests.get()を使用していましたが、 sess.get()

うまくいけば、これがお役に立てば幸いです、そしてあなたの助けに感謝します

まったく同じエラーメッセージが表示されました。問題は、ndg-httpsclientがインストールされていないことでした。

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

このページは役に立ちましたか?
0 / 5 - 0 評価