<p>request.exceptions.SSLE خطأ: حدث EOF في انتهاك للبروتوكول (_ssl.c: 645)</p>

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

هنا هو العدد الأول.
https://github.com/kennethreitz/requests/issues/2906

Python 3.5.1 (https://www.python.org/downloads/) Virtualenv 14.0.5 Mac OS X 10.11.3

أولاً ، قمت بإنشاء virtualenv و pip install requests[security]

ثم حصلت

>>> from cryptography.hazmat.backends.openssl.backend import backend
>>> print(backend.openssl_version_text())
OpenSSL 1.0.2f  28 Jan 2016

وهو ما كنت أتوقعه.

كل شيء يعمل بشكل رائع لمدة ساعة تقريبًا.

بعد ذلك ، تحطمت بعض النصوص الخاصة بي وهو أمر طبيعي. بعد ذلك ، عندما أحاول تشغيل البرنامج النصي الخاص بي مرة أخرى ، حصلت على الاستثناءات التالية

ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:645)

requests.packages.urllib3.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:645)

requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:645)

لذلك فتحت وحدة تحكم أخرى في Python و

>>> requests.get("https://www.google.com")
<Response [200]>
>>> requests.get("https://www.telegram.org")
Traceback (most recent call last):
  File "VirtualenvPath/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 559, in urlopen
    body=body, headers=headers)
  File "VirtualenvPath/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 345, in _make_request
    self._validate_conn(conn)
  File "VirtualenvPath/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 784, in _validate_conn
    conn.connect()
  File "VirtualenvPath/lib/python3.5/site-packages/requests/packages/urllib3/connection.py", line 252, in connect
    ssl_version=resolved_ssl_version)
  File "VirtualenvPath/lib/python3.5/site-packages/requests/packages/urllib3/util/ssl_.py", line 305, in ssl_wrap_socket
    return context.wrap_socket(sock, server_hostname=server_hostname)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 376, in wrap_socket
    _context=self)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 747, in __init__
    self.do_handshake()
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 983, in do_handshake
    self._sslobj.do_handshake()
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 628, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:645)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "VirtualenvPath/lib/python3.5/site-packages/requests/adapters.py", line 376, in send
    timeout=timeout
  File "VirtualenvPath/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 588, in urlopen
    raise SSLError(e)
requests.packages.urllib3.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:645)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "VirtualenvPath/lib/python3.5/site-packages/requests/api.py", line 67, in get
    return request('get', url, params=params, **kwargs)
  File "VirtualenvPath/lib/python3.5/site-packages/requests/api.py", line 53, in request
    return session.request(method=method, url=url, **kwargs)
  File "VirtualenvPath/lib/python3.5/site-packages/requests/sessions.py", line 468, in request
    resp = self.send(prep, **send_kwargs)
  File "VirtualenvPath/lib/python3.5/site-packages/requests/sessions.py", line 576, in send
    r = adapter.send(request, **kwargs)
  File "VirtualenvPath/lib/python3.5/site-packages/requests/adapters.py", line 447, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:645)
>>> 

لذلك أعدت تشغيل وإلغاء تثبيت كل هذه libs وقم بتثبيتها مرة أخرى. كل شيء يعمل مرة أخرى.

ولكن بعد ساعة واحدة أو نحو ذلك ، نفس الاستثناء مرة أخرى.

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

@ the-efi هل تم تثبيت pyopenssl و pyasn1 و ndg-httpsclient ؟

ال 77 كومينتر

بعد ذلك ، تحطمت بعض النصوص الخاصة بي وهو أمر طبيعي.

كيف يبدو حادث مثل هذا؟

بعد ذلك ، عندما أحاول تشغيل البرنامج النصي الخاص بي مرة أخرى ، حصلت على الاستثناءات التالية

هل أنت غير قادر تمامًا على تشغيلها بعد ذلك؟

@ sigmavirus24 إنه مجرد خطأ في الكود الخاص بي دون أي علاقة بالشبكات.
لست متأكدًا مما إذا كان هذا هو السبب الحقيقي أم مجرد صدفة.

ولكن هناك شيء واحد مؤكد ، بعد نقطة ما ، أنا غير قادر تمامًا على تقديم طلب إلى https://www.telegram.org ، والذي يمكنني فعله مباشرة بعد طلب التثبيت.

فقط لمعلوماتك: # 2906

لذا أود أن أشير إلى أنك تقوم بتثبيت requests[security] مما يعني أننا يجب أن نستخدم pyOpenSSL لكن ستراك تراك الخاص بك يوضح أننا لسنا كذلك. هذا مثير للفضول.

@ sigmavirus24 إذن هذا هناك أي شيء يمكنني القيام به لمساعدتك؟

اي فكرة؟ تضمين التغريدة

إذن ما يهم هنا هو: لماذا تتوقف التعليمات البرمجية الخاصة بك عن استخدام PyOpenSSL؟ عندما تواجه الانهيار ، هل يمكنك فتح وحدة تحكم python في بيئتك الافتراضية ثم تشغيل import urllib3.contrib.pyopenssl ، لمعرفة ما إذا كان ذلك يعمل؟

لا يمكن إعادة إنتاجه الآن. سأغلق هذا أولاً ، وإذا واجهت المشكلة مرة أخرى ، فسوف ألصق النتيجة وأعيد فتحها.

Lukasa أعتقد أنه نظرًا لأن الطلبات يتم شحنها مع urllib3 الخاص بها ، لم أتمكن من استيراد urllib3 بمفرده. والنتيجة التالية تؤكد ذلك.

Python 3.5.1 (v3.5.1:37a07cee5969, Dec  5 2015, 21:12:44) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import urllib3.contrib.pyopenssl
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named 'urllib3'
>>> ^D




pip list
cffi (1.5.0)
cryptography (1.2.2)
idna (2.0)
ndg-httpsclient (0.4.0)
pip (8.0.2)
pyasn1 (0.1.9)
pycparser (2.14)
pyOpenSSL (0.15.1)
requests (2.9.1)
setuptools (20.0)
six (1.10.0)
wheel (0.26.0)

عذرًا ، حاول استيراد requests.packages.urllib3.contrib.pyopenssl

تضمين التغريدة

Python 3.5.1 (v3.5.1:37a07cee5969, Dec  5 2015, 21:12:44) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests.packages.urllib3.contrib.pyopenssl
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "VirtualenvPath/lib/python3.5/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", line 57, in <module>
    from socket import _fileobject, timeout, error as SocketError
ImportError: cannot import name '_fileobject'
>>> 

أراهن أن هذا خطأ في 3.5 في pyOpenSSL لم نكن نعرفه عن lukasa (فيما يتعلق بـ _fileobject غير موجود.

كلا ، أعرف ذلك ، وقد اقترحت إصلاحًا في اتجاه التيار في urllib3 عندما بدأنا في اختبار PyOpenSSL. الحقيقة هي أن requests[security] لا يعمل (ولم يعمل أبدًا) على Python 3. سيتم إصلاح ذلك في إصدار قادم من الطلبات.

لذا فإن هذا لا يحل لغزنا: لماذا نجح هذا قليلاً ثم توقف؟

تعليق ظل بناءً على التقرير الأصلي ، فإن ssl.py المدمج في python به خيار لقمع EOFs المتعرجة نظرًا لوجود الكثير من المواقع التي ستغلق اتصالات SSL بشكل غير نظيف. في بعض الأحيان لا يمكن الاعتماد عليها كما لو كانت مسألة توقيت أو مصادفة. ما يلي مقتطف من ssl.py

class SSLSocket(socket):
    [...]
    def read(self, len=0, buffer=None):
        """Read up to LEN bytes and return them.
        Return zero-length string on EOF."""

        self._checkClosed()
        if not self._sslobj:
            raise ValueError("Read on closed or unwrapped SSL socket.")
        try:
            return self._sslobj.read(len, buffer)
        except SSLError as x:
            if x.args[0] == SSL_ERROR_EOF and self.suppress_ragged_eofs:
                if buffer is not None:
                    return 0
                else:
                    return b''
            else:
                raise

وجود نفس الاستثناء في Python 2.7.11 / OSX عند ضرب خادم بـ requests تحت gevent . هل يمكن أن يكون هذا مرتبطًا؟

@ the-efi هل يمكنك أن تكون أكثر تحديدًا بشأن الاستثناء الذي تراه؟

    r = requests.post(self.MY_URL, data=parameters)
  File "/Users/me/Envs/my_env/lib/python2.7/site-packages/requests/api.py", line 109, in post
    return request('post', url, data=data, json=json, **kwargs)
  File "/Users/me/Envs/my_env/lib/python2.7/site-packages/requests/api.py", line 50, in request
    response = session.request(method=method, url=url, **kwargs)
  File "/Users/me/Envs/my_env/lib/python2.7/site-packages/requests/sessions.py", line 465, in request
    resp = self.send(prep, **send_kwargs)
  File "/Users/me/Envs/my_env/lib/python2.7/site-packages/requests/sessions.py", line 573, in send
    r = adapter.send(request, **kwargs)
  File "/Users/me/Envs/my_env/lib/python2.7/site-packages/requests/adapters.py", line 431, in send
    raise SSLError(e, request=request)
SSLError: EOF occurred in violation of protocol (_ssl.c:590)

@ the-efi هل تم تثبيت pyopenssl و pyasn1 و ndg-httpsclient ؟

pyopenssl: سلبي
pyasn1: pyasn1 == 0.1.8 (عابر ، على ما أعتقد)
ndg-https العميل: سلبي

نعم. أنت تقوم أيضًا بتشغيل Python 2.7 ، لذلك يبدو أنك والملصق تواجهان مشاكل مختلفة.

هل تعرف ما إذا كنت قد واجهت مشكلتك أثناء إعداد الاتصال ، أم في اتصال طويل الأمد؟

أتخيل أن هذا أثناء إعداد الاتصال ، ولكن إذا requests استخدام الاتصالات المفتوحة سابقًا مع Connection: keep-alive فقد أكون مخطئًا.

تعيد الطلبات بالفعل استخدام الاتصالات المفتوحة سابقًا حيثما أمكن ، وهذا هو السبب في أنني طرحت السؤال. ؛)

سيكون من المفيد جدًا أن نحصل على التقاط حزمة لهذه المشكلة في حالتك ، على الرغم من أن ذلك قد يكون صعبًا نظرًا لأنه يحدث تحت عبء ثقيل.

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

نعم من فضلك. =)

Lukasa أي تقدم مع urllib3؟

caizixian لقد وصلنا إلى هناك ، لكن لدينا بعض المشكلات في اختبار CI لأن Travis CI لديه صورة PyPy قديمة إلى حد ما لا تتصرف بشكل جيد مع PyOpenSSL في الوقت الحالي. سأرى ما إذا كان بإمكاني الحصول على هذا للعمل في وقت ما في نهاية هذا الأسبوع.

Lukasa @ shazow لدى urllib3 دائمًا منزل على http://ci.kennethreitz.org ، إذا رغبت في ذلك!

أي تحديث على هذا واحد؟ يحدث كثيرًا عند العمل مع AWS.

mindw أفضل ما أعرفه ليس لدينا فهم جيد

يتطلب OS X ، Python 3.5.1 ، 2.10.0 + الأمان.
سأحاول تقديم أي معلومات إضافية حتى طلب :)

Traceback (most recent call last):
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 578, in urlopen
    chunked=chunked)
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 351, in _make_request
    self._validate_conn(conn)
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 814, in _validate_conn
    conn.connect()
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/packages/urllib3/connection.py", line 289, in connect
    ssl_version=resolved_ssl_version)
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/packages/urllib3/util/ssl_.py", line 308, in ssl_wrap_socket
    return context.wrap_socket(sock, server_hostname=server_hostname)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 376, in wrap_socket
    _context=self)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 747, in __init__
    self.do_handshake()
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 983, in do_handshake
    self._sslobj.do_handshake()
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 628, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:645)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/adapters.py", line 403, in send
    timeout=timeout
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 604, in urlopen
    raise SSLError(e)
requests.packages.urllib3.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:645)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/gabdav01/.virtualenvs/splatt/bin/splatt", line 9, in <module>
    load_entry_point('splatt', 'console_scripts', 'splatt')()
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/click/core.py", line 716, in __call__
    return self.main(*args, **kwargs)
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/click/core.py", line 696, in main
    rv = self.invoke(ctx)
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/click/core.py", line 1060, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/click/core.py", line 889, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/click/core.py", line 534, in invoke
    return callback(*args, **kwargs)
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/click/decorators.py", line 17, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/Users/gabdav01/work/paas/splatt/splatt/cmd.py", line 108, in create
    url, json=json, headers=headers)
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/sessions.py", line 518, in post
    return self.request('POST', url, data=data, json=json, **kwargs)
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/sessions.py", line 475, in request
    resp = self.send(prep, **send_kwargs)
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/sessions.py", line 585, in send
    r = adapter.send(request, **kwargs)
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/adapters.py", line 477, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:645)

يشير هذا بقوة إلى نقص SNI أو عدم وجود تداخل في التشفير. هل يمكنك طباعة سطر أوامر التشفير في OP وإخباري بما يقوله؟

كيف لي أن افعل ذلك؟

mindw انظر إلى OP ( المنشور الأصلي) حيث يستورد caizixian الواجهة الخلفية من cryptography ويطبع إصدار OpenSSL.

أيضا الحصول على هذه المشكلة. ما هي المعلومات التي يمكنني تقديمها للمساعدة في حلها؟

تضمين التغريدة إصدار Python والحزم المثبتة وإصدار الطلبات وإصدار OpenSSL ونظام التشغيل وموقع الويب الذي تحاول الاتصال به.

مرحبًا ، لقد بدأت للتو في استخدام الطلبات وأنا أتلقى نفس الشيء أيضًا. أنا على OS X 10.11.5 ، Python 3.5.1 في بيئة افتراضية ، أحدث إصدار من الطلبات. تشغيل إصدار open_ssl كما في OP يعطيني

OpenSSL 1.0.2h 3 مايو 2016

أحاول الاتصال بـ https://api.marketcircle.net/v1/ .

يبدو أن الطلبات هي اللعبة الوحيدة في المدينة دون كتابة مجموعة من التعليمات البرمجية - لم يعد Unirest مثبتًا لـ Python 3 ، لذا يا فتى ، آمل أن يتم اكتشاف ذلك قريبًا ..

eoco حسنًا ، هذا مثير للاهتمام. لا يمكنني إعادة إنتاج هذا على OS X 10.11.6 Beta و Python 3.5.1 مع الطلبات 2.10.0. هل تواجه المشكلة باستمرار أم بشكل متقطع؟

باستمرار - لم أتمكن من الاتصال بنجاح حتى الآن.

تتبع التتبع الخاص بي قريب جدًا من mindw أعلاه ، وسيتم نشره في الأسفل هنا. ولكن تمامًا مثل FYI ، قمت بتثبيت طلبات Python 2.7 لاختبار ذلك أيضًا وحصلت على SNIMissingWarning: على الرغم من أن التحذير نفسه قال إنه قد يكون له علاقة بكونه إصدارًا أقدم من Python ، لكنني لست متأكدًا مما إذا كان هذا هو قضية. بغض النظر ، لا يوجد اتصال هناك أيضا.

SNIMissingWarning /Library/Python/2.7/site-packages/requests-2.10.0-py2.7.egg/requests/packages/urllib3/util/ssl_.py:122: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.

لقد عدت أيضًا وقمت بتثبيت Unirest في Python 2.7 وحصلت على خطأ EOF آخر ، لكن هذه المرة في urllib2:

urllib2.URLError: <urlopen error [Errno 8] _ssl.c:510: EOF occurred in violation of protocol>

لذلك - قد لا يكون لهذا أي علاقة بطلبات .py على الإطلاق ، ولكن بصراحة ، لا أعرف إلى أين أذهب من هنا ، بخلاف عدم استخدام بايثون. هذا هو التتبع من الطلبات / Python 3.5.1:
"
طلبات الاستيراد
url = ' https://api.marketcircle.net/v1/ '
r = calls.get (url) # عدم إضافة أي رؤوس تفويض ، فقط التحقق من الاتصال

Traceback (آخر مكالمة أخيرة):
ملف "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py" ، السطر 578 ، في urlopen
مقسم = مقطع)
ملف "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py" ، السطر 351 ، في _make_request
self._validate_conn (كون)
ملف "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py" ، السطر 814 ، في _validate_conn
conn.connect ()
ملف "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connection.py" ، السطر 289 ، في اتصال
ssl_version =olved_ssl_version)
ملف "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/util/ssl_.py" ، السطر 308 ، في ssl_wrap_socket
إرجاع Context.wrap_socket (sock ، server_hostname = server_hostname)
ملف "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py" ، السطر 376 ، في مقبس الالتفاف
_context = self)
ملف "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py" ، السطر 747 ، في __init__
self.do_handshake ()
ملف "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py" ، السطر 983 ، في do_handshake
self._sslobj.do_handshake ()
ملف "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py" ، السطر 628 ، في do_handshake
self._sslobj.do_handshake ()
ssl.SSLEOFError: حدث EOF في انتهاك للبروتوكول (_ssl.c: 645)

أثناء معالجة الاستثناء أعلاه ، حدث استثناء آخر:

Traceback (آخر مكالمة أخيرة):
ملف "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/adapters.py" ، السطر 403 ، في الإرسال
المهلة = المهلة
ملف "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py" ، السطر 604 ، في urlopen
رفع خطأ SSLE (e)
request.packages.urllib3.exceptions.SSLE خطأ: حدث EOF في انتهاك للبروتوكول (_ssl.c: 645)
"
لذا ، أعتذر إذا لم يكن هذا مفيدًا. شكرا لك!

هل يمكنك تشغيل هذا وإظهار الإخراج لي من فضلك؟ python3 -c "import ssl; print(ssl.OPENSSL_VERSION)"

إذن هذه هي النتيجة: (إصدار مختلف عن الأمر يتم تشغيله في OP)

OpenSSL 0.9.8zh 14 يناير 2016

شكرا لك!

eoco حسنًا ، رائع.

لذا فإن المشكلة هنا هي أن Python 3 الخاص بك مرتبط بنظام OpenSSL القديم. ماذا يوجد في بيئة النقطة الخاصة بك؟ هل يمكنك تشغيل python3 -m pip freeze لي؟

ليس هناك الكثير ..

Mozaica-iMac: ~ eoc $ python3 -m pip freeze

py3minepi==0.0.1
requests==2.10.0
You are using pip version 8.1.1, however version 8.1.2 is available.

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

حسنًا ، أسهل طريقة لإصلاح هذا الأمر هي تشغيل python3 -m pip install pyopenssl pyasn1 ndg-httpsclient . يجب أن يؤدي ذلك إلى حل مشكلتك ، ولكن إذا لم يكن الأمر كذلك ، فيمكننا اتباع خيارات أكثر قوة.

همم. لا يزال نفس الخطأ بعد ذلك-

بيثون 3.5 م نقطة تجميد

cffi==1.6.0
cryptography==1.4
idna==2.1
ndg-httpsclient==0.4.1
py3minepi==0.0.1
pyasn1==0.1.9
pycparser==2.14
pyOpenSSL==16.0.0
requests==2.10.0
six==1.10.0

تضمين التغريدة هل يمكنك تشغيل هذا من أجلي؟ python3 -c "from requests.packages.urllib3.contrib import pyopenssl; pyopenssl.inject_into_urllib3()" وأخبرني ما هو الناتج؟ قم أيضًا بتشغيل python3 -c "from cryptography.hazmat.backends.openssl.backend import backend; print(backend.openssl_version_text())" .

توقف ، هذا يشير بالتأكيد إلى المشكلة. عند التشغيل لأول مرة ، حصلت على التتبع التالي:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", line 63, in <module>
    from urllib3.packages.backports.makefile import backport_makefile
ImportError: No module named 'urllib3'

أليس urllib جزءًا من المكتبة القياسية؟ على أي حال ، أنا أقوم بتثبيت urllib وأنا الآن أقوم بالعمل.

لا أستطيع أن أخبرك كم أقدر مساعدتك في هذا ، لقد ذهبت إلى أبعد الحدود. أتساءل عما إذا كانت هناك مشكلة في تنزيل Python 3.5 لنظام التشغيل Mac على python.org؟ كان هذا تثبيتًا نظيفًا إلى حد كبير لهذا المشروع. على أي حال ، ربما يساعد هذا شخصًا آخر إذا واجه شيئًا كهذا.

مرة أخرى، شكراجزيلا لك!

آه ، هذا يبدو وكأنه خطأ طلبات صحيح. يحتوي Urllib3 على استيراد غير نسبي في قاعدة التعليمات البرمجية الخاصة به والذي يتعطل عندما نقوم ببيعه! يجب أن نهدف إلى إصلاح ذلك.

eoco إذن بينما نجري هذا الإصلاح عبر خط الأنابيب (انظر shazow / urllib3 # 901) ، سيكون الحل الأسهل لك هو تثبيت Python 3 باستخدام شيء مثل Homebrew. سيؤدي هذا إلى ربط Python 3 الخاص بك ببرنامج OpenSSL أحدث كثيرًا ، والذي سيحل هذه المشكلة لك في كل من الطلبات وأي تطبيق آخر يستخدم روابط TLS للنظام.

فهمتك. يبدو أن مجرد تثبيت urllib3 قد أدى إلى حل مشكلتي ، لكنني قد أفعل ذلك. أعتذر عن أي لبس قد يكون سببه هذا.

شكرا لك!

لقد صادفت نفس الخطأ بعد التبديل إلى AWS ووضع التطبيق خلف موازن التحميل المرن ، لم يحدث من قبل.

لقد تم تثبيت urllib3 أيضًا.

هل هناك أمل في تثبيت pyopenssl؟ لقد حاولت وكان هناك الكثير من الأخطاء على المستوى c (والتي قد تكون سببًا لبعض الأجزاء المفقودة في صورة عامل الإرساء).

[2016-06-29 02:27:59,932: CRITICAL/MainProcess] Task ventures.tasks.cache_warmup[ae2c97eb-3b28-4896-8d0f-42f712115707] INTERNAL ERROR: SSLError(SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:645)'),),)
Traceback (most recent call last):
  File "/usr/local/lib/python3.5/dist-packages/celery/app/trace.py", line 253, in trace_task
    I, R, state, retval = on_error(task_request, exc, uuid)
  File "/usr/local/lib/python3.5/dist-packages/celery/app/trace.py", line 201, in on_error
    R = I.handle_error_state(task, eager=eager)
  File "/usr/local/lib/python3.5/dist-packages/celery/app/trace.py", line 85, in handle_error_state
    }[self.state](task, store_errors=store_errors)
  File "/usr/local/lib/python3.5/dist-packages/celery/app/trace.py", line 125, in handle_failure
    einfo=einfo)
  File "/usr/local/lib/python3.5/dist-packages/celery/utils/dispatch/signal.py", line 166, in send
    response = receiver(signal=self, sender=sender, **named)
  File "/srv/core/celery.py", line 31, in notify_task_failure
    """.format(sender, exception, args, kwargs))
  File "/usr/lib/python3.5/logging/__init__.py", line 1308, in error
    self._log(ERROR, msg, args, **kwargs)
  File "/usr/lib/python3.5/logging/__init__.py", line 1415, in _log
    self.handle(record)
  File "/usr/lib/python3.5/logging/__init__.py", line 1425, in handle
    self.callHandlers(record)
  File "/usr/lib/python3.5/logging/__init__.py", line 1487, in callHandlers
    hdlr.handle(record)
  File "/usr/lib/python3.5/logging/__init__.py", line 855, in handle
    self.emit(record)
  File "/srv/core/management/logger/slack.py", line 28, in emit
    notify_slack(message, channel)
  File "/usr/local/lib/python3.5/dist-packages/celery/local.py", line 188, in __call__
    return self._get_current_object()(*a, **kw)
  File "/usr/local/lib/python3.5/dist-packages/celery/app/trace.py", line 439, in __protected_call__
    return orig(self, *args, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/celery/app/task.py", line 420, in __call__
    return self.run(*args, **kwargs)
  File "/srv/core/tasks.py", line 66, in notify_slack
    data=json.dumps(payload), headers={'Content-Type': 'application/json'}
  File "/usr/local/lib/python3.5/dist-packages/requests/api.py", line 107, in post
    return request('post', url, data=data, json=json, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/requests/api.py", line 53, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/requests/sessions.py", line 468, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python3.5/dist-packages/requests/sessions.py", line 576, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/requests/adapters.py", line 447, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:645)
pip freeze:

amqp==1.4.9
analytics-python==1.1.0
anyjson==0.3.3
beautifulsoup4==4.4.1
billiard==3.3.0.23
bleach==1.4.2
boto==2.39.0
celery==3.1.23
Django==1.8.13
django-appconf==1.0.2
django-compressor==2.0
django-countries==3.4.1
django-filter==0.13.0
django-haystack==2.5.dev0
django-htmlmin==0.9.0
django-modelcluster==1.1
django-overextends==0.4.1
django-redis==4.3.0
django-rest-swagger==0.3.5
django-storages-redux==1.3.2
django-taggit==0.18.3
django-treebeard==4.0.1
djangorestframework==3.3.3
docopt==0.4.0
docutils==0.12
drf-extensions==0.2.8
dropbox==4.0
elasticsearch==1.8.0
et-xmlfile==1.0.1
geopy==1.11.0
google-api-python-client==1.5.0
gunicorn==19.4.5
hiredis==0.2.0
html5lib==0.9999999
httplib2==0.9.2
jdcal==1.2
jsonfield==1.0.3
kombu==3.0.35
mandrill==1.0.57
Markdown==2.6.5
mock==1.0.1
numpy==1.11.0
oauth2client==2.2.0
openpyxl==2.3.4
Pillow==3.1.1
psycopg2==2.6.1
pyasn1==0.1.9
pyasn1-modules==0.0.8
pycurl==7.43.0
pygobject==3.20.0
PyMySQL==0.7.2
python-apt==1.1.0b1
python-dateutil==2.5.3
pytz==2016.4
PyYAML==3.11
rcssmin==1.0.6
redis==2.10.5
requests==2.9.1
rjsmin==1.0.12
rsa==3.4.2
simplejson==3.8.2
six==1.10.0
sphinx-me==0.3
unattended-upgrades==0.1
Unidecode==0.4.19
uritemplate==0.6
urllib3==1.16
wagtail==1.4.5
Willow==0.3.1
python3 -c "from requests.packages.urllib3.contrib import pyopenssl; pyopenssl.inject_into_urllib3()"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/local/lib/python3.5/dist-packages/requests/packages/urllib3/contrib/pyopenssl.py", line 49, in <module>
    from ndg.httpsclient.ssl_peer_verification import SUBJ_ALT_NAME_SUPPORT
ImportError: No module named 'ndg'

shredding جرب تثبيت pyopenssl و ndg-httpsclient و pyasn1. أنت بحاجة إلى الثلاثة في هذا الوقت.

حسنًا ، سأعطيها لقطة (يمكنني فقط إعادة إنتاج ذلك على نظام aws والإبلاغ عنه).

بالنسبة لأولئك الذين يقومون بتشغيل python3 ضمن حزمة ubuntu:latest على عامل الإرساء ، فأنت بحاجة إلى إضافة

RUN apt-get install build-essentials python-dev libffi

قبل الإضافة

pyOpenSSL==16.0.0
ndg-httpsclient==0.4.1
pyasn1==0.1.9

... لمتطلباتك. txt

حصلت على نفس المشكلة هنا.
تم الإصلاح عن طريق تثبيت pyopenssl و ndg-httpsclient و pyasn1 و urllib3 ofcourse.

لا أستطيع أن أتحدث مرة أخرى من جانبي أيضًا.

كنت أحاول الاتصال بـ twitter API ، لذا في البداية كنت أتلقى الخطأ أدناه
requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:645)

لقد استخدمت رقعة القرد ولكن pyOpenSSL و ndg-httpsclient و pyasn1 وبطريقة ما
لكن بعد هذا حصلت على هذا
Traceback (most recent call last): File "twitter_friend.py", line 32, in <module> stream.statuses.filter(follow='sajjkum') File "C:\Python27\lib\site-packages\twython\streaming\types.py", line 66, in filter self.streamer._request(url, 'POST', params=params) File "C:\Python27\lib\site-packages\twython\streaming\api.py", line 139, in _request response = _send(retry_counter) File "C:\Python27\lib\site-packages\twython\streaming\api.py", line 123, in _send response = func(url, **requests_args) File "C:\Python27\lib\site-packages\requests\sessions.py", line 511, in post return self.request('POST', url, data=data, json=json, **kwargs) File "C:\Python27\lib\site-packages\requests\sessions.py", line 468, in request resp = self.send(prep, **send_kwargs) File "C:\Python27\lib\site-packages\requests\sessions.py", line 576, in send r = adapter.send(request, **kwargs) File "C:\Python27\lib\site-packages\requests\adapters.py", line 426, in send raise ConnectionError(err, request=request) requests.exceptions.ConnectionError: ('Connection aborted.', BadStatusLine("''",))

وهذا
Traceback (most recent call last): File "twitter_friend.py", line 32, in <module> stream.statuses.filter(follow='sajjkum') File "C:\Python27\lib\site-packages\twython\streaming\types.py", line 66, in filter self.streamer._request(url, 'POST', params=params) File "C:\Python27\lib\site-packages\twython\streaming\api.py", line 139, in _request response = _send(retry_counter) File "C:\Python27\lib\site-packages\twython\streaming\api.py", line 123, in _send response = func(url, **requests_args) File "C:\Python27\lib\site-packages\requests\sessions.py", line 511, in post return self.request('POST', url, data=data, json=json, **kwargs) File "C:\Python27\lib\site-packages\requests\sessions.py", line 468, in request resp = self.send(prep, **send_kwargs) File "C:\Python27\lib\site-packages\requests\sessions.py", line 576, in send r = adapter.send(request, **kwargs) File "C:\Python27\lib\site-packages\requests\adapters.py", line 447, in send raise SSLError(e, request=request) requests.exceptions.SSLError: bad handshake: SysCallError(-1, 'Unexpected EOF')

أنا أستخدم python 2.7 ، urllib3 (1.4) ، الطلبات (2.9.1).

يشير كلا الخطأين إلى أن الخادم البعيد لا يقبل طلبك. ومع ذلك ، لا يمكننا حقًا تشخيص هذا الخطأ. أوصيك بترقية OpenSSL الخاص بك والمحاولة مرة أخرى.

pip install --force-reinstall requests[security] حلها بالنسبة لي.

أحصل على نفس الاستثناء بعد تجربة كل حل مذكور أعلاه. تتبع الخطأ:
ملف "/home/prateek/.local/lib/python2.7/site-packages/requests/sessions.py" ، السطر 488 ، في الطلب
Resp = self.send (الإعدادية ، * send_kwargs)ملف "/home/prateek/.local/lib/python2.7/site-packages/requests/sessions.py" ، السطر 609 ، في الإرسالr = adapt.send (request، * kwargs)
ملف "/home/prateek/.local/lib/python2.7/site-packages/requests/adapters.py" ، السطر 497 ، في الإرسال
رفع SSLError (e، request = request)
request.exceptions.SSLError: ("bad handshake: SysCallError (-1، 'Unlimited EOF')"،)

معلومات حزمة النظام:
cffi == 1.9.1
التشفير == 1.6
idna == 2.1
ndg-httpsclient == 0.4.2
موارد pkg == 0.0.0
pyasn1 == 0.1.9
pycparser == 2.17
pyOpenSSL == 16.2.0
الطلبات == 2.12.3
ستة == 1.10.0

Python: Python 3.5.2 (افتراضي ، 5 يوليو 2016 ، 12:43:10)
نظام التشغيل: Ubuntu 16.04
OpenSSL 1.0.2g 1 مارس 2016

نقدر مساعدتك في هذا الأمر.

من شبه المؤكد أن هذا يعني أن الأصفار التي يتم تقديمها إلى النظير البعيد غير مقبولة. إذا كنت تستخدم openssl s_client -connect <host>:<port> لموقع الويب الذي تحاول الاتصال به ، فهل يمكن أن تخبرني ما هو الناتج؟ (يرجى التأكد من القيام بذلك باستخدام OpenSSL 1.0.2g الذي تستخدمه).

Lukasa شكرا

كما أقوم بإضافة الرد من OpenSSL 1.0.1f 6 يناير 2014
يبدو أنه يعمل على هذا الإصدار.

@> openssl version
OpenSSL 1.0.2g  1 Mar 2016
@> openssl s_client -connect <host>:<port>
CONNECTED(00000003)
140401805448856:error:140790E5:SSL routines:ssl23_write:ssl handshake failure:s23_lib.c:177:
no peer certificate available
No client certificate CA names sent
SSL handshake has read 0 bytes and written 305 bytes
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : 0000
    Session-ID: 
    Session-ID-ctx: 
    Master-Key: 
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1480703355
    Timeout   : 300 (sec)

حاولت أيضًا مع الإصدار السابق من opensl ويبدو أنه يعمل:

@> openssl version
OpenSSL 1.0.1f 6 Jan 2014
@> openssl s_client -connect <server>:<host>
CONNECTED(00000003)
depth=0 C = US, ST = California, O = Internet Widgits Pty Ltd
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 C = US, ST = California, O = Internet Widgits Pty Ltd
verify error:num=27:certificate not trusted
verify return:1
depth=0 C = US, ST = California, O = Internet Widgits Pty Ltd
verify error:num=21:unable to verify the first certificate
verify return:1
Certificate chain
 0 s:/C=US/ST=California/O=Internet Widgits Pty Ltd
   i:/C=US/ST=California/O=Internet Widgits Pty Ltd/CN=John Smith
Server certificate
BEGIN CERTIFICATE
<certificate>
END CERTIFICATE
subject=/C=US/ST=California/O=Internet Widgits Pty Ltd
issuer=/C=US/ST=California/O=Internet Widgits Pty Ltd/CN=<Name>

No client certificate CA names sent
SSL handshake has read 2120 bytes and written 477 bytes

New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-SHA384
Server public key is 4096 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-SHA384
    Session-ID: C7AEA448B9E21C30D90D1377904426A9D1A21971785D547378CA07ACDAC00161
    Session-ID-ctx: 
    Master-Key: C5B31E9D7A59EF4E6A2657E9F55A64B89F4AE3BBDFD864ADD1087449AA927D9C1655A76E44C3E30FF2301DB00C1CB2F7
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1480703425
    Timeout   : 300 (sec)
    Verify return code: 21 (unable to verify the first certificate)

لذلك يبدو أن خادمك لديه اعتراض قوي جدًا على شيء ما في مصافحة OpenSSL 1.0.2. هل أنت على دراية بـ tcpdump أو wireshark؟ إذا كنت كذلك ، فسيكون من المفيد حقًا التقاط حزمة من المصافحتين وإتاحتها لي.

نفس المشكلة هنا مع www.celestrak.com

pip freeze --local

[...] Omitting other packages
cffi==1.9.1
cryptography==1.7.1
idna==2.2
ipaddress==1.0.17
ndg-httpsclient==0.4.2
numpy==1.11.3
pyasn1==0.1.9
pyOpenSSL==16.2.0
requests==2.12.4
scandir==1.4

openssl s_client -connect www.celestrak.com:443

CONNECTED(00000003)
140736264172552:error:140790E5:SSL routines:ssl23_write:ssl handshake failure:s23_lib.c:177:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 308 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : 0000
    Session-ID:
    Session-ID-ctx:
    Master-Key:
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1483987800
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---

openssl version

OpenSSL 1.0.2j  26 Sep 2016

أنا أستخدم الإصلاح (الذي كان يعمل من قبل) المقترح هنا .

class CustomAdapter(requests.adapters.HTTPAdapter):
    ''' See: http://stackoverflow.com/a/14146031/1334711 '''
    def init_poolmanager(self, connections, maxsize, block=False):
        self.poolmanager = requests.packages.urllib3.poolmanager.PoolManager(
            num_pools=connections,
            maxsize=maxsize,
            block=block,
            ssl_version=ssl.PROTOCOL_TLSv1)

# Other code

        if url_parse.scheme in ('http', 'https'):
            # It's a URL, get from Internet
            try:
                tle_file = requests.get(source).text

            except requests.exceptions.SSLError:
                pytest.set_trace()
                s = requests.Session()
                s.mount('https://', CustomAdapter())
                tle_file = s.get(source).text

Python v.2.7.13
نظام التشغيل: macOS 10.12.2

الخطأ الذي أواجهه هو:
SSLError: ("bad handshake: SysCallError(-1, 'Unexpected EOF')",)

rubendibattista www.celestrack.com به تكوين TLS رهيب ، كما ترون هنا . هذا يعني أن الإصدارات الحديثة من الطلبات لا تدعم أيًا من مجموعات التشفير التي يدعمها الخادم ، لأنها كلها ضعيفة ومعطلة.

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

Lukasa شكرا لدعمكم. لقد اتصلت بمسؤول الموقع للإبلاغ عما تقوله ومحاولة إيجاد حل أفضل من استخدام الحل الذي تقترحه.

اهلا ياجماعة! حصلت على هذه الأخطاء أيضا. أدى استخدام python3 وتثبيت التحرير والسرد (pyopenssl ndg-httpsclient pyasn1 urllib3) إلى تنفيذ الحيلة. لكني أشعر بالفضول حول كيفية تصرف python2.7 على OS X و Ubuntu:

سيناريو 001

  • بيثون: 2.7
  • الطلبات: 2.3.0
  • pyopenssl ndg-httpsclient pyasn1 urllib3: غير مثبت
  • Virtualenv: 1.11.6
  • نظام التشغيل: OS X El Captain 10.11.6 (15G1217)
  • OpenSSL: 0.9.8zh 14 يناير 2016

خطأ

Traceback (most recent call last):
  File "loanpro_doc_uploader.py", line 113, in <module>
    run()
  File "loanpro_doc_uploader.py", line 109, in run
    loanpro = LoanPro(args.env, args.folder)
  File "loanpro_doc_uploader.py", line 36, in __init__
    self.get_all_customforms_data()
  File "loanpro_doc_uploader.py", line 69, in get_all_customforms_data
    resp = requests.get(url, headers=headers)
  File "/Users/vyscond/Projects/razorvision/loan-documents/env/lib/python2.7/site-packages/requests/api.py", line 55, in get
    return request('get', url, **kwargs)
  File "/Users/vyscond/Projects/razorvision/loan-documents/env/lib/python2.7/site-packages/requests/api.py", line 44, in request
    return session.request(method=method, url=url, **kwargs)
  File "/Users/vyscond/Projects/razorvision/loan-documents/env/lib/python2.7/site-packages/requests/sessions.py", line 456, in request
    resp = self.send(prep, **send_kwargs)
  File "/Users/vyscond/Projects/razorvision/loan-documents/env/lib/python2.7/site-packages/requests/sessions.py", line 559, in send
    r = adapter.send(request, **kwargs)
  File "/Users/vyscond/Projects/razorvision/loan-documents/env/lib/python2.7/site-packages/requests/adapters.py", line 382, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:590)

سيناريو 002

  • بيثون: 3.4
  • الطلبات: 2.12.5
  • pyopenssl ndg-httpsclient pyasn1 urllib3: غير مثبت
  • Virtualenv: 1.11.6
  • نظام التشغيل: OS X El Captain 10.11.6 (15G1217)
  • OpenSSL: 0.9.8zh 14 يناير 2016

خطأ

Traceback (most recent call last):
  File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/packages/urllib3/connectionpool.py", line 594, in urlopen
    chunked=chunked)
  File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/packages/urllib3/connectionpool.py", line 350, in _make_request
    self._validate_conn(conn)
  File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/packages/urllib3/connectionpool.py", line 835, in _validate_conn
    conn.connect()
  File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/packages/urllib3/connection.py", line 323, in connect
    ssl_context=context)
  File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/packages/urllib3/util/ssl_.py", line 324, in ssl_wrap_socket
    return context.wrap_socket(sock, server_hostname=server_hostname)
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/ssl.py", line 365, in wrap_socket
    _context=self)
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/ssl.py", line 583, in __init__
    self.do_handshake()
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/ssl.py", line 810, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:600)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/adapters.py", line 423, in send
    timeout=timeout
  File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/packages/urllib3/connectionpool.py", line 624, in urlopen
    raise SSLError(e)
requests.packages.urllib3.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:600)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "loanpro_doc_uploader.py", line 113, in <module>
    run()
  File "loanpro_doc_uploader.py", line 109, in run
    loanpro = LoanPro(args.env, args.folder)
  File "loanpro_doc_uploader.py", line 36, in __init__
    self.get_all_customforms_data()
  File "loanpro_doc_uploader.py", line 69, in get_all_customforms_data
    resp = requests.get(url, headers=headers)
  File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/api.py", line 70, in get
    return request('get', url, params=params, **kwargs)
  File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/api.py", line 56, in request
    return session.request(method=method, url=url, **kwargs)
  File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/sessions.py", line 488, in request
    resp = self.send(prep, **send_kwargs)
  File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/sessions.py", line 609, in send
    r = adapter.send(request, **kwargs)
  File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/adapters.py", line 497, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:600)

سيناريو 004

  • بيثون: 2.7
  • الطلبات: 2.12.5
  • pyopenssl ndg-httpsclient pyasn1 urllib3: غير مثبت
  • نظام التشغيل: Ubuntu 14.4 (Dockerized)
  • OpenSSL: غير مثبت

ذهب الخطأ

سيناريو 003

  • بيثون: 3.4
  • الطلبات: 2.12.5
  • pyopenssl ndg-httpsclient pyasn1 urllib3: مثبت
  • Virtualenv: 1.11.6
  • نظام التشغيل: OS X El Captain 10.11.6 (15G1217)
  • OpenSSL: 0.9.8zh 14 يناير 2016

ذهب الخطأ

الخطأ غير واضح ، ولكن على الأرجح أنه نتيجة لإصدار OpenSSL الخاص بك. لا يمكن أن يكون ادعائك بأن Ubuntu 14.04 ليس به OpenSSL صحيحًا إذا كنت تقدم طلبات HTTPS. أفضل تخميني هو أن الخادم يرسل EOF نظرًا لعدم قبول أي من الشفرات الخاصة بك. يعمل Ubuntu لأنه يحتوي على OpenSSL أحدث مع الأصفار الأحدث. يعمل تثبيت PyOpenSSL لأنه يوفر نسخة موردة من OpenSSL 1.0.2 ، أيضًا مع الأصفار الأحدث.

أهلا!

لدي مشكلة مع بعض مواقع https وطلب مكتبة.
الموقع: https://ndmc.gov.in/vacancy.aspx

المثبتة:
appdirs == 1.4.0
cffi == 1.9.1
التشفير == 1.7.2
idna == 2.2
ndg-httpsclient == 0.4.2
التعبئة والتغليف == 16.8
pyasn1 == 0.1.9
pycparser == 2.17
pyOpenSSL == 16.2.0
pyparsing == 2.1.10
الطلبات == 2.13.0
ستة == 1.10.0
urllib3 == 1.20
OpenSSL 1.0.2k 26 يناير 2017

الحصول على خطأ: request.exceptions.SSLError: ("مصافحة سيئة: SysCallError (-1، 'Unlimited EOF')"،)

نظام التشغيل: Archbang linux ، الأحدث
Python 3.6 و Python 2.7 - نفس الخطأ

أنت شخص آخر يفوز بمسابقتنا من يمكنه محاولة الاتصال بأسوأ خادم HTTPS في العالم . تم تكوين هذا الخادم بشكل فظيع ، وهو غير آمن تمامًا. السبب في مواجهتك لهذه المشكلة هو أن الطلبات لم تعد تدعم أيًا من مجموعات التشفير التي يدعمها هذا الخادم لأنها كلها إما ضعيفة أو غير آمنة. في الحالة الأولى ، أوصيك بمحاولة الضغط على شخص ما لإصلاح الخادم ، ولكن إذا كان عليك حقًا الاتصال به ، فيمكنك إعادة إضافة 3DES مثل هذا .

vyscond أنقذت حياتي. بغض النظر عما فعلته على OSX الخاص بي ، فقد اختفى فقط عند تثبيت pyopenssl ndg-httpsclient pyasn1 urllib3 . ربما يجب إضافته كاعتماديات لتثبيت OSX requests ؟

إنه مفيد فقط في بعض تكوينات OS X و Python. والنتيجة النهائية هي أنها تظل اختيارية.

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

يعتمد على. يمكن تقديم المشكلات من خلال طلب هذه التبعيات أيضًا ، ليس أقلها أنها تضيف OpenSSL جديدًا إلى نظامك يتم إصداره وإدارته بشكل منفصل.

Lukasa لبعض الأسباب جعلت الإعداد يعمل ، يبدو أن pyopenssl (تم تثبيته عبر الطلبات [الأمان] يعبث بالشهادات المرفقة ببعض الطلبات.
اضطررت إلى إلغاء تثبيت حزمة pyopenssl لإجبار الطلبات على استخدام OpenSSL في urllib3.
يحدث هذا عند استخدام adal (https://github.com/AzureAD/azure-activedirectory-library-for-python) والذي لا يعمل بشكل أساسي مع بعض الإصدارات القديمة من الطلبات (تلك التي تدعم الشهادات).
يبدو لي القليل من الفودو.

كنت أواجه هذه المشكلة على Mac OSX Sierra v 10.12.0. حاولت كل شيء على هذا الموضوع ، لم تنجح. أخيرًا ، قمت بترقية نظام التشغيل الخاص بي إلى الإصدار 10.12.6 واختفت المشكلة.

قد يظهر الخطأ أيضًا عند استخدام طلبات python لإجراء مكالمة api إلى موقع خلف شبكة افتراضية خاصة ، ويحدث أن يكون نفق vpn معطلاً في تلك اللحظة.

اهلا ياجماعة!

أنا جديد بعض الشيء على طلباتي ووجدت هذا الخطأ أثناء إجراء POC مع الطلبات لمعرفة ما إذا كان يمكن أن يفي بمتطلباتي للامتثال للمعايير المشتركة. حاولت توصيل طلبات POC الخاصة بي بهذه الأداة ، وأنا أنظر على وجه التحديد في حالات الاختبار الخاصة بـ FIA-X509 Ext 1.1 ولكن هذا ما حصلت عليه:

Traceback (آخر مكالمة أخيرة):
ملف "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connectionpool.py" ، السطر 601 ، في urlopen
مقسم = مقطع)
ملف "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connectionpool.py" ، السطر 346 ، في _make_request
self._validate_conn (كون)
ملف "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connectionpool.py" ، السطر 850 ، في _validate_conn
conn.connect ()
ملف "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connection.py" ، السطر 326 ، متصل
ssl_context = سياق)
ملف "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/util/ssl_.py" ، السطر 329 ، في ssl_wrap_socket
إرجاع Context.wrap_socket (sock ، server_hostname = server_hostname)
ملف "/usr/lib/python3.6/ssl.py" ، السطر 407 ، في مقبس الالتفاف
_context = self، _session = جلسة)
ملف "/usr/lib/python3.6/ssl.py" ، السطر 814 ، في __init__
self.do_handshake ()
ملف "/usr/lib/python3.6/ssl.py" ، السطر 1068 ، في do_handshake
self._sslobj.do_handshake ()
ملف "/usr/lib/python3.6/ssl.py" ، السطر 689 ، في do_handshake
self._sslobj.do_handshake ()
ssl.SSLEOFError: حدث EOF في انتهاك للبروتوكول (_ssl.c: 777)

أثناء معالجة الاستثناء أعلاه ، حدث استثناء آخر:

Traceback (آخر مكالمة أخيرة):
ملف "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/requests/adapters.py" ، السطر 440 ، في الإرسال
المهلة = المهلة
ملف "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connectionpool.py" ، السطر 639 ، في urlopen
_stacktrace = sys.exc_info () [2])
ملف "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/util/retry.py" ، السطر 388 ، في زيادة
رفع MaxRetryError (_pool أو url أو خطأ أو ResponseError (سبب))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool (host = '10 .0.0.221 '، المنفذ = 443): تم تجاوز الحد الأقصى لإعادة المحاولات بعنوان url: / (سببها خطأ SSLE (خطأ SSLEOFError (8 ،' حدث EOF في انتهاك للبروتوكول (_ssl.c: 777) ) ') ،))

أثناء معالجة الاستثناء أعلاه ، حدث استثناء آخر:

Traceback (آخر مكالمة أخيرة):
ملف "req.py" ، السطر 91 ، بتنسيق
r = session.request ('الحصول على' ، 'https://10.0.0.221' ، تحقق = صحيح)
ملف "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/requests/sessions.py" ، السطر 508 ، عند الطلب
Resp = self.send (الإعدادية ، * send_kwargs)ملف "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/requests/sessions.py" ، السطر 618 ، في الإرسالr = adapt.send (request، * kwargs)
ملف "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/requests/adapters.py" ، السطر 506 ، في الإرسال
رفع SSLError (e، request = request)
request.exceptions.SSLError: HTTPSConnectionPool (host = '10 .0.0.221 '، port = 443): تم تجاوز الحد الأقصى لإعادة المحاولات بعنوان url: / (سببها خطأ SSLE (خطأ SSLEOFError (8،' EOF حدث في انتهاك للبروتوكول (_ssl.c: 777 ) ') ،))

هذا هو رمز POC الذي أستخدمه:

import ssl
import requests

from requests.adapters import HTTPAdapter
from requests.packages.urllib3.poolmanager import PoolManager
from requests.packages.urllib3.util import ssl_

CIPHERS = (
    'RSA+AES'
)

class TlsAdapter(HTTPAdapter):
    def __init__(self, ssl_options=0, **kwargs):
        self.ssl_options = ssl_options
        super(TlsAdapter, self).__init__(**kwargs)

    def init_poolmanager(self, *pool_args, **pool_kwargs):
        ctx = ssl_.create_urllib3_context(ciphers=CIPHERS, cert_reqs=ssl.CERT_REQUIRED, options=self.ssl_options)

        self.poolmanager = PoolManager(*pool_args,
                                       ssl_context=ctx,
                                       **pool_kwargs)

session = requests.session()

adapter = TlsAdapter(ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1)
session.mount("https://", adapter)
r = session.request('GET', 'https://10.0.0.221', verify=True)
print(r)

حيث 10.0.0.221 هو المكان الذي وضعت فيه أداة التحقق.

لست متأكدًا تمامًا من سبب حدوث هذا الخطأ. حاولت المرور بهذا الموضوع بالإضافة إلى العديد من الأسئلة الأخرى حول stackoverflow أيضًا ولكن لم أجد حلًا مناسبًا.

سوف أعترف أنه ليس لدي فهم واضح لبروتوكول TLS أيضًا في هذه المرحلة الزمنية. لذا ، إذا استطاع أحد أن يرشدني إلى ما هي المشكلة هنا ، فسأكون ممتنًا.

يرجى إعلامي إذا فاتني أي شيء أو احتجت إلى تقديم أي نوع من المعلومات الإضافية. شكرا!

تمامًا مثل FYI ، يحدث هذا الخطأ أيضًا عندما لا يتم تمكين SSL على الخادم الذي تتصل به.

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

القضايا ذات الصلة

Matt3o12 picture Matt3o12  ·  3تعليقات

remram44 picture remram44  ·  4تعليقات

mitar picture mitar  ·  4تعليقات

cnicodeme picture cnicodeme  ·  3تعليقات

NoahCardoza picture NoahCardoza  ·  4تعليقات