2013-05-25 12 views
21

Sto utilizzando l'attività di Django Celery per connettersi all'API di Facebook Graph con richieste lib utilizzando Gevent. Il problema su cui sono costantemente in esecuzione è che di tanto in tanto si verifica EOF in violazione dell'eccezione del protocollo. Ho cercato in giro e varie fonti offrono correzioni diverse ma nessuna sembra funzionare.Connessione SSL Python "EOF si è verificato in violazione del protocollo"

Ho provato a eseguire il patch di scimmia sul modulo ssl (gevent.monkey.patch_all()) e anche su alcuni altri, ma senza fortuna.

Io non sono nemmeno sicuro se questo è problema OpenSSL come alcune fonti potrebbero suggerire come non ho incontrato prima di applicare Gevent ottimizzazione

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 

Sto usando l'ultima versione 1.0rc Gevent.

Un altro problema che mantiene poping up di tanto in tanto, anche se URL è corretto è: Nuovo tentativo (5 tentativi rimangono) dopo il collegamento rotto da 'errore (2, 'Nessun file o directory')':/ID/eventi? limite = 5000 & campi = descrizione, il nome, la posizione, start_time, end_time & access_token = GETTONE

+1

hai provato [forzando TLSv1 come suggerito qui] (http://stackoverflow.com/questions/14102416/python-requests-requests-exceptions-sslerror-errno-8-ssl-c504-eof-occurred)? – jfs

+0

Proverò anche questa correzione. La mia unica preoccupazione è che quando eseguo l'attività con Gevent Pool size = 1 non ottengo alcun errore, ma quando provo a eseguire più (da 2 a 10) errori diventano più comuni (rete non raggiungibile, errore EOF ssl, no tale file o directory). Quindi per me sembra il suo problema gevent? – user962563

+0

Non conosco lo stato corrente della compatibilità 'gevent' /' requests'. Hai provato a 'grequests'? – jfs

risposta

14

Utilizzando la forzata TLSv1 fix come suggerito da JF Sebastian fissato tutti i problemi che stavo affrontando.

Suggerimenti per domande future riguardanti:

  • DNSError eccezione - l'aggiornamento Gevent da 0.13.X a 1.0rc risolve questo problema

  • problemi SSL - guardare correzione in link fornito da JF Sebastian

1

Ho installato l'ultimo Python 2.7 (2.7.11) e il problema è andato via. Credo che il problema potrebbe essere risolto anche nel 2.7.6 (stavo usando 2.7.5 su Mac OSX).

+1

Sono appena stato colpito da questo problema con python 2.7.6 su ubuntu 3.13.0-48-generic –

0

Avevo lo stesso errore durante il recupero dei tweet per il mio apprendimento automatico. Facendo l'installazione di pip del seguente mi ha aiutato. Questo funziona:

pip install ndg-httpsclient 
pip install pyopenssl 
pip install pyasn1 

ha rimosso la mia SSLError: EOF si è verificato in violazione del protocollo (_ssl.c: 590) errore.

Spero che aiuti.

Problemi correlati