2013-05-25 2 views
21

Я использую задачу Django Celery для подключения к Facebook Graph API с запросами lib с использованием Gevent. Проблема, с которой я постоянно сталкиваюсь, заключается в том, что время от времени я получаю EOF в нарушении исключения протокола. Я искал вокруг, и различные источники предлагают разные исправления, но никто не работает.Python SSL-соединение «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 является правильным является: Повторная (5 попыток остаться) после того, как разорванная связь по «ошибки (2,„Нет такого файла или каталога“)»:/ID/события? предел = 5000 & поля = описание, название, местоположение, start_time, END_TIME & access_token = ЗНАК

+1

Вы пробовали [форсировать TLSv1, как предлагается здесь] (http://stackoverflow.com/questions/14102416/python-requests-requests-exceptions-sslerror-errno-8-ssl-c504-eof-occurred)? – jfs

+0

Я также попробую это исправить. Моя единственная проблема заключается в том, что при выполнении задачи с Gevent Pool size = 1 я вообще не получаю никаких ошибок, но когда я пытаюсь запустить больше (от 2 до 10), ошибки становятся более распространенными (недоступность сети, ошибка EOF ssl, нет такой файл или каталог). Так что мне кажется, что это проблема? – user962563

+0

Я не знаю текущий статус совместимости 'gevent' /' requests'. Вы пробовали «grequests»? – jfs

ответ

14

Использование принудительного TLSv1 fix как предложил JF Sebastian исправлены все проблемы, которые я столкнулся.

Советы для будущих вопросов, касающихся:

  • DNSError исключение - модернизация GEvent от 0.13.X до 1.0rc устраняет эту проблему

  • SSL вопросы - смотрите на исправление в ссылке, предоставленной JF Sebastian

1

Я установил последнюю версию Python 2.7 (2.7.11), и проблема исчезла. Я считаю, что проблема может быть решена еще в 2.7.6 (я использовал 2.7.5 на Mac OSX).

+1

Я только что попал в эту проблему с помощью python 2.7.6 на ubuntu 3.13.0-48-generic –

0

У меня была такая же ошибка во время получения твитов для моего обучения машинам. Выполнение этой процедуры помогло мне. Это работает:

pip install ndg-httpsclient 
pip install pyopenssl 
pip install pyasn1 

Он снял SSLError: EOF произошло в нарушение протокола (_ssl.c: 590) ошибки.

Надеюсь, это поможет.