2013-05-25 13 views
21

Używam zadania Django Celery do łączenia się z interfejsem API Graph API z żądaniami lib przy użyciu Gevent. Problem, na który ciągle czekam, polega na tym, że od czasu do czasu pojawia się EOF z naruszeniem wyjątku protokołu. Szukałem w różnych źródłach, oferując różne poprawki, ale żadna nie działa.Pythonowe połączenie SSL "EOF wystąpił z naruszeniem protokołu"

Próbowałem łatania małpy modułu ssl (gevent.monkey.patch_all()) i kilka innych też, ale bez powodzenia.

Nie jestem nawet pewien, czy jest to problem, ponieważ niektóre źródła OpenSSL może sugerować, bo nie spotkałem go przed nałożeniem Optimization 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 

Używam najnowszej wersji Gevent 1.0rc.

Kolejną kwestią, która utrzymuje poping się od czasu do czasu, choć URL jest prawidłowy to: Ponowna próba (5 prób pozostać) po podłączeniu złamane przez „błąd (2,«Nie ma takiego pliku lub katalogu»)”:/ID/wydarzenia? limit = 5000 & pola = opis, nazwa, lokalizacja, start_time, end_time & access_token = TOKEN

+1

Czy próbowałeś [zmusza TLSv1 zgodnie z sugestią tutaj] (http://stackoverflow.com/questions/14102416/python-requests-requests-exceptions-sslerror-errno-8-ssl-c504-eof-occurred)? – jfs

+0

Spróbuję również tej poprawki. Moim jedynym zmartwieniem jest to, że przy uruchamianiu zadania z wielkością puli Gevent = 1 nie otrzymuję żadnych błędów, ale gdy próbuję uruchomić więcej (2 do 10), błędy stają się bardziej powszechne (sieć nieosiągalna, błąd EOF ssl, nie taki plik lub katalog). Więc wydaje mi się, że jest to problem z geem? – user962563

+0

Nie wiem, jaki jest obecny stan zgodności 'gevent' /' requests'. Czy próbowałeś "podróbek"? – jfs

Odpowiedz

14

Używanie zmuszony TLSv1 fix sugerowane przez JF Sebastian ustalone wszystkie kwestie byłem stojące.

wskazówki dla przyszłych pytań dotyczących:

  • DNSError wyjątek - uaktualnienie Gevent z 0.13.X do 1.0rc rozwiązuje ten WYDANIE

  • problemy SSL - patrzeć na poprawki w link podany przez JF Sebastian

1

Zainstalowałem najnowszy Python 2.7 (2.7.11) i problem zniknął. Wierzę, że problem można rozwiązać nawet w wersji 2.7.6 (w wersji Mac OS X używałem wersji 2.7.5).

+1

Właśnie dostałem ten problem z pythonem 2.7.6 na Ubuntu 3.13.0-48-generic –

0

Miałem ten sam błąd podczas pobierania tweetów do nauki komputera. Pomogło mi wykonanie instalacji pip następujących elementów. To działa:

pip install ndg-httpsclient 
pip install pyopenssl 
pip install pyasn1 

To zdjąłem SSLError: EOF nastąpiło z naruszeniem protokołu (_ssl.c: 590) błędu.

Mam nadzieję, że to pomaga.

Powiązane problemy