2015-03-06 7 views
5

Ich möchte einige Python-Anfragen mit Charles Proxy zu debuggen.überprüfen Python-Anfragen mit Charles-Proxy für HTTPS

Ich brauche das Zertifikat für Charles auf den Anruf umfassen, ist aber nicht funktioniert

import requests 
endpoint_url = 'https://www.httpsnow.org/' 
r = requests.get(endpoint_url, verify=True, cert='/Users/iosdev/DopPy/charles.crt') 

print "empexo" 
print r 

ich die https-Adresse auf Charles hinzugefügt haben,

ich auf Charles erhalten:

SSLHandshake: Remote-Host-Verbindung während Handshake

und auf Python das Protokoll mit Fehlern

empexo 
Traceback (most recent call last): 
    File "/Users/iosdev/DopPy/GetCelebs.py", line 15, in <module> 
    r = requests.get(endpoint_url, verify=True, cert='/Users/iosdev/DopPy/charles.crt') 
    File "/Users/iosdev/VenvPY26/lib/python2.6/site-packages/requests/api.py", line 65, in get 
    return request('get', url, **kwargs) 
    File "/Users/iosdev/VenvPY26/lib/python2.6/site-packages/requests/api.py", line 49, in request 
    response = session.request(method=method, url=url, **kwargs) 
    File "/Users/iosdev/VenvPY26/lib/python2.6/site-packages/requests/sessions.py", line 461, in request 
    resp = self.send(prep, **send_kwargs) 
    File "/Users/iosdev/VenvPY26/lib/python2.6/site-packages/requests/sessions.py", line 573, in send 
    r = adapter.send(request, **kwargs) 
    File "/Users/iosdev/VenvPY26/lib/python2.6/site-packages/requests/adapters.py", line 431, in send 
    raise SSLError(e, request=request) 
requests.exceptions.SSLError: [Errno 336265225] _ssl.c:341: error:140B0009:SSL routines:SSL_CTX_use_PrivateKey_file:PEM lib 

Process finished with exit code 1 

Antwort

4

fand ich diesen Thread, während ich ein ähnliches Problem Fehlerbehebung wurde. In dem Szenario, in dem ich in das cert-Argument lief, wurde verwendet, um den Pfad zu einer ".crt" -Datei zu definieren, wenn stattdessen das verify-Argument verwendet werden sollte.

Die korrekte Verwendung endete aussehen wie:

requests.get(endpoint_url, verify='/path/to/file.crt') 

Siehe Anfragen Dokumentation für weitere Details: http://docs.python-requests.org/en/master/user/advanced/#ssl-cert-verification


Als Nebenwirkung, finde ich den Einsatz Anfrage Fähigkeit, den Weg zu einem spezifizieren ".crt" über die Umgebungsvariable REQUESTS_CA_BUNDLE ist effektiver, wenn Charles Proxy für lokales Debugging verwendet wird.

etwas Laufen wie die folgende in der Schale spart mit dem Pfad zu Charles' „.crt“ angeben, für alle Anfragen rufen:

REQUESTS_CA_BUNDLE=/path/to/file.crt 
export REQUESTS_CA_BUNDLE