Requests: خطأ SSLE: حدث EOF في انتهاك للبروتوكول (_ssl.c: 590)

تم إنشاؤها على ٩ يوليو ٢٠١٦  ·  6تعليقات  ·  مصدر: psf/requests

من فضلك تحمل معي لأنني جديد تمامًا مع Python و Github بشكل عام.

لقد كنت أستخدم الطلبات لكشط البيانات من متجر Play. أحتاج إلى تقديم عدد كبير من الطلبات (حوالي 20 ألفًا). إنه يعمل بشكل رائع لحوالي 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) )

يبدو أن efi ، على github هذا ، لديه نفس المشكلة في هذا الموضوع: https://github.com/kennethreitz/requests/issues/3006 (انظر أدناه ، لم يكن OP) لكنني لم أتمكن من العثور عليه الخيط الذي فتحه لمزيد من المساعدة. أستخدم Python 2.7. أيضا.

لقد علقت في هذا الأمر لفترة طويلة الآن ولا يمكنني العثور على أي إجابة هنا ولا StackOverflow (ربما كانت الإجابة صحيحة تحت أنفي ولكني واجهت مشكلة في فهمها بسبب نقص معرفتي في SSL والطلبات) .

شكرًا لك مقدمًا على مساعدتك ، وآسف إذا كان هناك شيء غير واضح - يرجى إعلامي.

التعليق الأكثر فائدة

كان لدي نفس رسالة الخطأ بالضبط ، كانت المشكلة أنني لم أقم بتثبيت عميل ndg-https

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

ال 6 كومينتر

عندما تقول إنك عالق ، هل هذا هو الاستثناء فقط؟ أم أن طلبات المتابعة لا تعمل؟ أسأل بسبب حدوث أخطاء عابرة في الشبكة ، وإذا كنت تقدم عددًا كبيرًا من طلبات الويب ، فيجب أن تفكر في تنفيذ نوع من منطق إعادة المحاولة في مواجهة تلك الأخطاء.

حرائق الاستثناء. يبدو أن طلبات المتابعة تعمل ، لكني لم أحاول تنفيذ إعادة المحاولة بعد. كنت أخشى أنني كنت أعارض قواعد تقديم الكثير من الطلبات إلى خادم أو شيء من هذا القبيل ، على ما أعتقد.

سأحاول بالتأكيد ذلك وأقوم بتحديث هذا الموضوع. شكرا!

حسنًا ، لما يستحقه ، نظرًا لأنك تستخدم requests.* فأنت تعرض نفسك لخطر زيادة التحميل على موارد الشبكة بينك وبين الخادم. يجب أن تحاول استخدام الجلسة .

لأي شخص لديه هذه المشكلة:

لقد أصلحته باتباع اقتراحات

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

بعد ذلك ، حيث كنت أستخدم requests.get() قبل ، استخدمت sess.get() .

نأمل أن يساعدك هذا ، وشكرًا على مساعدتك Lukasa !

كان لدي نفس رسالة الخطأ بالضبط ، كانت المشكلة أنني لم أقم بتثبيت عميل ndg-https

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

variable لقد قمت بتثبيت ndg-httpsclient ولكن الخطأ نفسه

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات