EOF SSL-соединения Python произошел с нарушением протокола

Я использую задачу Django Celery для подключения к Facebook Graph API с запросами lib с помощью Gevent. Проблема, с которой я постоянно сталкиваюсь, заключается в том, что время от времени я получаю 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/ events?limit=5000&fields=description,name,location,start_time,end_time&access_token=ТОКЕН


person user962563    schedule 25.05.2013    source источник
comment
Я тоже попробую это исправление. Меня беспокоит только то, что при запуске задачи с размером пула Gevent = 1 я вообще не получаю никаких ошибок, но когда я пытаюсь запустить больше (от 2 до 10), ошибки становятся более распространенными (сеть недоступна, ошибка EOF ssl, нет такой файл или каталог). Так что мне кажется, что это проблема gevent?   -  person user962563    schedule 25.05.2013
comment
Я не знаю текущий статус совместимости gevent / requests. Вы пробовали grequests?   -  person jfs    schedule 25.05.2013
comment
Принудительное исправление TLSv1, кажется, помогает, ошибок SSL больше нет. Однако... с включенным этим исправлением я продолжаю получать сообщение об ошибке OperationalError: невозможно открыть файл базы данных (используя sqllite3) примерно после 7k записей в базу данных. Что странно, поскольку эта ошибка должна происходить с самого начала, если у сельдерея не было доступа к БД, а не после 7 тыс. успешных транзакций...   -  person user962563    schedule 25.05.2013
comment
Странно, я получаю эту ошибку, используя Wi-Fi / модем моего телефона и FTPS, но НЕ при том же коде и стандартном Wi-Fi.   -  person pyCthon    schedule 09.05.2015


Ответы (3)


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

Подсказки для будущих вопросов относительно:

  • Исключение DNSError — обновление Gevent с 0.13.X до 1.0rc устраняет эту проблему.

  • Проблемы с SSL - посмотрите на исправление в ссылке, предоставленной Дж. Ф. Себастьяном

person user962563    schedule 26.05.2013

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

person some user    schedule 08.12.2015
comment
Я только что столкнулся с этой проблемой с python 2.7.6 на Ubuntu 3.13.0-48-generic - person Anthony Kong; 18.05.2017
comment
Вероятно, 2.7.9: urllib3.readthedocs.io/en/latest / - person Chris; 08.11.2019

У меня была такая же ошибка при получении твитов для моего машинного обучения. Выполнение установки pip из следующего помогло мне. Это работает:

pip install ndg-httpsclient
pip install pyopenssl
pip install pyasn1

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

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

person Ashwin Dhakal    schedule 10.02.2018