2015-03-06 3 views
5

Я хочу отлаживать некоторые запросы python с использованием charles proxy.проверить запросы Python с прокси-сервером charles для HTTPS

мне нужно включить сертификат для Чарльза на вызов, но не работает

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 

я добавил адрес Https на Чарльзе,

я получаю на Чарльзе:

SSLHandshake: подключение удаленного хоста в режиме подтверждения связи

и питон журнал с ошибкой

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 

ответ

4

Я нашел эту тему, пока я устранение подобной проблемы. В сценарии я столкнулся с аргументом cert, который использовался для определения пути к файлу «.crt», когда вместо этого должен был использоваться аргумент verify.

Правильное использование в конечном итоге выглядит как:

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

Обратитесь к документации Обработка запросов для получения более подробной информации: http://docs.python-requests.org/en/master/user/advanced/#ssl-cert-verification


Как и в сторону, я нахожу используя способность запрос к указать путь к «.crt» через переменную окружения REQUESTS_CA_BUNDLE более эффективен при использовании Charles Proxy для локальной отладки.

Запуск что-то вроде следующего в оболочке избавляет от необходимости указать путь к Charles' «.crt» на каждые запросы позвонить:

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