2013-10-20 24 views
5

Sto provando a scaricare una pagina HTTPS dal mio sito ospitato su Google App Engine con SNI. Non importa quello che uso biblioteca, ottengo il seguente errore:urllib3 on python 2.7 Errore SNI su Google App Engine

[Errno 8] _ssl.c:504: EOF occurred in violation of protocol 

Ho provato risolvere l'errore in molti modi, tra cui l'uso della monkeypatch urllib3 openssl:

from urllib3.contrib import pyopenssl 
pyopenssl.inject_into_urllib3 

Ma ho sempre ottenere lo stesso errore di cui sopra.

Qualche idea?

+1

Non sono sicuro che si tratti di un errore di battitura nella domanda, ma la riga deve essere 'pyopenssl.inject_into_urllib3()' - ovvero, è una chiamata di funzione, non un accesso di proprietà. – shazow

+0

Hai perfettamente ragione! il mio stupido errore .. testato e funzionante, grazie :) – Tzach

risposta

9

Sfortunatamente per urllib3, la libreria standard Python non ha aggiunto il supporto SNI fino a Python 3.2. (Vedi Issue #118 @ urllib3)

Per utilizzare SNI in Python 2.7 con urllib3, è necessario utilizzare il monkeypatch di PyOpenSSL injection. (Vedi Issue #156 @ urllib3)

from urllib3.contrib import pyopenssl 
pyopenssl.inject_into_urllib3() 

La tua domanda in sostanza aveva lo stesso codice, tranne che mancava la parentesi invitano la chiamata pyopenssl.inject_into_urllib3(). Fissaggio che dovrebbe fare il trucco.

Avrete anche necessario assicurarsi di avere le seguenti dipendenze disponibili:

  • pyOpenSSL (testato con 0,13)
  • NDG-httpsclient (testato con 0.3.2)
  • pyasn1 (testato con 0.1.6)