我使用Django芹菜任务连接到Facebook Graph API与请求库使用Gevent。我一直在运行的问题是,每隔一段时间,我得到EOF发生违反协议异常。我已经搜索了周围和各种来源提供不同的修复,但似乎没有一个工作。
我试过猴子修补ssl模块(geevent .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是正确的是:在连接被'error(2, 'No such file or directory')'断开后重试(仍有5次尝试):/ID/events?limit=5000&fields=description,name,location,start_time,end_time&access_token=TOKEN
使用J.F Sebastian建议的强制TLSv1修复修复了我面临的所有问题。
关于以下问题的提示:
-
DNSError异常-从0.13升级Gevent。X到1.0rc修复此问题
-
SSL问题-查看J.F Sebastian提供的修复链接
我安装了最新的Python 2.7(2.7.11),问题就解决了。我相信这个问题甚至可以在2.7.6中解决(我在Mac OSX上使用2.7.5)。
我在为我的机器学习抓取tweet时遇到了同样的错误。下面的pip安装对我很有帮助。
pip install ndg-httpsclient
pip install pyopenssl
pip install pyasn1
它删除了我的SSLError: EOF发生在违反协议(_ssl.c:590)错误。
希望能有所帮助。