Как работать с апи если сайт требует SSL сертификат?
У меня есть некая программа для работы с апи DevOps. Получение данных с одного DevOps и создание user story/tasks в другом. Функция получения данных будет ниже. Но недавно нам сказали установить SSL сертификат и заходить в девопс теперь можно только через VPN компании. Соответственно, теперь появляется такая ошибка. Я совсем не знаю куда двигаться
raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='devops.xregernd.local', port=443): Max retries exceeded with url: /Support/Maergt/_apis/wit/workitems/$User%20Story?api-version=5.1 (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1122)')))
def GetUSInfo(id_):
url_get_m = f'http://devops.xpa123re.com:8181/support/Mat/_apis/wit/workitems/{id_}?api-version=5.1'
r = requests.get(url_get_m,
auth=(user_name_x, token_x))
res = r.json()
workType = res['fields']['System.WorkItemType']
if workType != "User Story":
return False, False, False, "Not a User Story"
id_ = res['id']
title = res['fields']['System.Title']
description = res['fields']['System.Description']
return id_, title, description, "OK"
Ответы (1 шт):
В библиотеке requests по умолчанию включена проверка SSL сертификатов как в браузере. В вашем случае проверка не удалась, получили ошибку SSLError - unable to get local issuer certificate. Для более глубокого понимания вопроса, Вам стоит прочитать про SSL сертификаты.
В request для отключения проверки сертификата используется передача соответствующего параметра verify = False:
requests.get(url, verify=False)
Для передачи сертификата:
requests.get(url, verify='/path/to/certfile')
# или в сессии
session = requests.Session()
session.verify = '/path/to/certfile'
Для получения сертификата для библиотеки request можно использовать certifi.
import certifi
certifi.where() # out: '/path/to/python_dir/site-packages/certifi/cacert.pem'