我正在使用Django Celery任务连接到使用Gevent的请求lib的Facebook Graph API。我一直在运行的问题是,我偶尔会发生违反协议异常的EOF。我已经四处搜索,各种来源提供了不同的修复,但似乎都没有。
我已经尝试过猴子修补ssl模块(gevent.monkey.patch_all())和其他一些但没有运气。
我甚至不确定这是否是openssl问题,因为有些消息来源可能会建议我在应用Gevent优化之前没有遇到过它
Connection error: [Errno 8] _ssl.c:504: EOF occurred in violation of protocol
Traceback (most recent call last):
File "/home/user/workspace/startup/project/events/tasks.py", line 52, in _process_page
data = requests.get(current_url)
File "/home/user/workspace/startup/env/local/lib/python2.7/site-packages/requests/api.py", line 55, in get
return request('get', url, **kwargs)
File "/home/user/workspace/startup/env/local/lib/python2.7/site-packages/requests/api.py", line 44, in request
return session.request(method=method, url=url, **kwargs)
File "/home/user/workspace/startup/env/local/lib/python2.7/site-packages/requests/sessions.py", line 354, in request
resp = self.send(prep, **send_kwargs)
File "/home/user/workspace/startup/env/local/lib/python2.7/site-packages/requests/sessions.py", line 460, in send
r = adapter.send(request, **kwargs)
File "/home/user/workspace/startup/env/local/lib/python2.7/site-packages/requests/adapters.py", line 250, in send
raise SSLError(e)
SSLError: [Errno 8] _ssl.c:504: EOF occurred in violation of protocol
我正在使用最新的1.0rc Gevent版本。
虽然URL正确,但是不时出现的另一个问题是: 连接被'错误(2,'没有这样的文件或目录')'断开后重试(保留5次):/ ID / events?limit = 5000& fields = description,name,location,start_time ,END_TIME&安培; =的access_token的 TOKEN
答案 0 :(得分:14)
使用J.F Sebastian所建议的强制TLSv1 fix解决了我所面临的所有问题。
有关未来问题的提示:
DNSError异常 - 将Gevent从0.13.X升级到1.0rc修复了此问题
SSL问题 - 请参阅J.F Sebastian提供的链接修复
答案 1 :(得分:1)
我安装了最新的Python 2.7(2.7.11),问题就消失了。我相信问题甚至可以在2.7.6中解决(我在Mac OSX上使用2.7.5)。
答案 2 :(得分:0)
我在为机器学习提取推文时遇到了同样的错误。做以下的pip安装帮助了我。这有效:
pip install ndg-httpsclient
pip install pyopenssl
pip install pyasn1
它删除了我的SSLError:EOF发生违反协议(_ssl.c:590)错误。
希望它有所帮助。