2013-01-18 21 views
8

Sono passati giorni da quando ho iniziato a cercare una soluzione per questo.Python Richieste problema con SSL

Ho cercato di utilizzare le richieste per effettuare una richiesta https tramite un proxy senza fortuna.

Benche questo è incluso in un progetto più grande di mio, tutto si riduce fatto per questo:

import requests 

    prox = 'xxx.xxx.xxx.xxx:xxx' # fill in valid proxy 

    r = requests.get('https://ipdb.at', proxies={'http': prox, 
               'https': prox}) 

Ho provato il kward verificare = False, ma continuo a ricevere lo stesso errore o una variante di esso:

Traceback (most recent call last): 
     File "/Users/mg/Desktop/proxy_service.py", line 21, in <module> 
     verify=False) 
     File "/Library/Python/2.7/site-packages/requests/api.py", line 55, in get 
     return request('get', url, **kwargs) 
     File "/Library/Python/2.7/site-packages/requests/api.py", line 44, in request 
     return session.request(method=method, url=url, **kwargs) 
     File "/Library/Python/2.7/site-packages/requests/sessions.py", line 279, in request 
     resp = self.send(prep, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies) 
     File "/Library/Python/2.7/site-packages/requests/sessions.py", line 374, in send 
     r = adapter.send(request, **kwargs) 
     File "/Library/Python/2.7/site-packages/requests/adapters.py", line 213, in send 
     raise SSLError(e) 
    requests.exceptions.SSLError: [Errno 1] _ssl.c:504: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol 
    [Finished in 20.4s with exit code 1] 

Sto usando le ultime versioni di richieste e openssl e 2.7.3 per python. L'ho provato su mac mountain lion 10.8.2 e anche su windows seven.

L'ho cercato su google, ho visto che altri avevano problemi simili. Ho trovato richieste di pull correlate sulle richieste di librerie e urllib3, inoltre ho visto che le informazioni su questa sono una brutta implementazione del verbo http connect. Ho trovato una soluzione per utilizzare un adattatore personalizzato (non ricordo esattamente, ma penso che sia il termine giusto) per utilizzare un protocollo SSL personalizzato. Provato tutti, nessuno ha aiutato.

Quindi, sto cercando ulteriori informazioni. Hai idea di cosa sta succedendo, posso sistemarlo, ecc., Ecc ...

Tutti gli aiuti sono benvenuti e grazie a tutti!

PS: Ho provato diversi proxy e sono sicuro che non siano il problema.

+0

nemmeno un indizio? :) –

+0

Questo può aiutare: http://stackoverflow.com/questions/13463206/how-to-get-https-content-using-python-requests-through-tor-and-privoxy?rq=1 –

+0

Sembra che urllib3 è vicino al supporto per questo: https://github.com/shazow/urllib3/pull/139. –

risposta

14

Ho avuto lo stesso problema ma durante il tentativo di utilizzare oauth2client (libreria Google per l'utilizzo di oauth2 rispetto alle proprie API). Dopo una giornata di perder tempo ("sperimentazione"), ho scoperto che ho avuto la variabile ENV impostata come segue:

https_proxy=https://your-proxy:port 

La modifica di questa a

https_proxy=http://your-proxy:port 

completamente risolto il problema per me. Presumibilmente ciò significa che l'iniziale stretta di mano dal client al proxy non è ora crittografata, ma dopo di ciò l'https deve passare direttamente. Non credo che il mio proxy aziendale sia stato configurato per parlare comunque di https.

Nota tuttavia che i miei browser si sono comportati correttamente con l'impostazione precedente. Forse hanno silenziosamente provato a stabilire la connessione proxy su http dopo aver fallito l'uso di https.

Cerca su google Esempi di impostazione di https_proxy su entrambi gli indirizzi http o https in egual misura. Immagino dipenda da come è configurato il proxy.

Il pulsante "utilizza tutti i protocolli" nei popup di configurazione del browser/sistema operativo facilita l'utilizzo accidentale dell'impostazione che avevo.

Tuttavia non sono sicuro se questo è il tuo problema. Il tuo codice suggerisce che utilizzi già esattamente la stessa impostazione proxy per http e https.

A proposito, questo era tutto su Ubuntu 12.04.1.

+0

Si prega di smettere di postare e cancellare. Dovresti essere in grado di vedere il tuo post eliminato in modo da modificarlo e quindi ripristinarlo. –

+0

Questo ha funzionato per me. Non so se questo è estensibile a qualsiasi tipo di proxy per il protocollo https, ma in tal caso, la libreria delle richieste dovrebbe essere in grado di rilevare e correggere questo problema da solo –