Requests: SSLError: EOF terjadi karena melanggar protokol (_ssl.c:590)

Dibuat pada 9 Jul 2016  ·  6Komentar  ·  Sumber: psf/requests

Harap bersabar karena saya cukup baru dengan Python dan github secara umum.

Saya telah menggunakan permintaan untuk mengikis data dari Play Store. Saya perlu membuat sejumlah besar permintaan (sekitar 20k). Ini berfungsi dengan baik untuk sekitar 3000-4000 permintaan tetapi macet setelah itu (Kesalahan SSL). Saya tidak terbiasa dengan SSL dan permintaan, jadi saya tidak tahu apa penyebabnya.

Kesalahan:

(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, di github ini, tampaknya memiliki masalah yang sama di utas ini: https://github.com/kennethreitz/requests/issues/3006 (lihat di bawah, dia bukan OP) tetapi saya tidak dapat menemukan utas yang dia buka untuk bantuan lebih lanjut. Saya menggunakan Python 2.7. demikian juga.

Saya telah terjebak dalam hal ini cukup lama sekarang dan saya tidak dapat menemukan jawaban apa pun di sini atau StackOverflow (jawabannya mungkin tepat di bawah hidung saya, tetapi saya kesulitan memahaminya karena kurangnya pengetahuan saya dalam SSL & permintaan) .

Terima kasih sebelumnya atas bantuan Anda, dan maaf jika ada yang kurang jelas -- beri tahu saya.

Komentar yang paling membantu

Saya memiliki pesan kesalahan yang persis sama, masalahnya adalah saya tidak menginstal ndg-httpsclient

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

Semua 6 komentar

Ketika Anda mengatakan Anda macet, apakah hanya pengecualian yang menyala? Atau apakah permintaan tindak lanjut tidak berfungsi? Saya bertanya karena kesalahan jaringan sementara _do_ terjadi, dan jika Anda membuat banyak permintaan web, Anda harus mempertimbangkan untuk menerapkan semacam logika coba lagi di hadapannya.

Pengecualian menyala. Permintaan tindak lanjut tampaknya berhasil, tetapi saya belum mencoba menerapkan coba lagi. Saya takut saya melanggar aturan membuat terlalu banyak permintaan ke server atau sesuatu, saya kira.

Saya pasti akan mencobanya dan memperbarui utas ini. Terima kasih!

Baik untuk apa nilainya, karena Anda menggunakan requests.* Anda menempatkan diri Anda pada risiko yang lebih besar untuk membebani sumber daya jaringan antara Anda dan server. Anda harus mencoba menggunakan session .

Bagi siapa pun dengan masalah ini:

Saya telah memperbaikinya dengan mengikuti saran @Lukasa dan menambahkan ini tepat setelah mengimpor permintaan:

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

Kemudian, di mana saya menggunakan requests.get() sebelumnya, saya menggunakan sess.get() .

Semoga ini bisa membantu, dan terima kasih atas bantuan Anda @Lukasa !

Saya memiliki pesan kesalahan yang persis sama, masalahnya adalah saya tidak menginstal ndg-httpsclient

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

@variabel Saya menginstal ndg-httpsclient tetapi kesalahan yang sama

Apakah halaman ini membantu?
0 / 5 - 0 peringkat