هنا هو العدد الأول.
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 وقم بتثبيتها مرة أخرى. كل شيء يعمل مرة أخرى.
ولكن بعد ساعة واحدة أو نحو ذلك ، نفس الاستثناء مرة أخرى.
بعد ذلك ، تحطمت بعض النصوص الخاصة بي وهو أمر طبيعي.
كيف يبدو حادث مثل هذا؟
بعد ذلك ، عندما أحاول تشغيل البرنامج النصي الخاص بي مرة أخرى ، حصلت على الاستثناءات التالية
هل أنت غير قادر تمامًا على تشغيلها بعد ذلك؟
@ 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:
خطأ
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)
خطأ
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)
ذهب الخطأ
ذهب الخطأ
الخطأ غير واضح ، ولكن على الأرجح أنه نتيجة لإصدار 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 على الخادم الذي تتصل به.
التعليق الأكثر فائدة
@ the-efi هل تم تثبيت
pyopenssl
وpyasn1
وndg-httpsclient
؟