Как настроить пользовательский http-клиент в Bravado?
Я использую Bravado 3.0.0. Я хочу сделать запрос, который будет использовать мой собственный CA Bundle. Базовый клиент Requests не использует преимущества REQUESTS_CA_BUNDLE
env var я установил.
Как передать пользовательский клиент, использующий мой CA Bundle?
2 ответа
(Этот ответ основан на текущей версии Bravado 8.1.0 на момент написания этой статьи)
Поскольку мне понадобилось некоторое время, чтобы найти этот ответ, когда я узнал о Bravado, и в основном потому, что я думаю, что другие могут выиграть, когда начнем, вот обновленный взгляд на то, как установить соединение:
Чтобы использовать нестандартные настройки в HTTP-клиенте (используя в качестве примера запросы), необходимо создать новый экземпляр HTTP-клиента со своими собственными настройками, а затем передать его в вызов SwaggerClient.from_url():
""" Required to create a new Requests 'http_client' instance: """
from bravado.requests_client import Requestsclient
""" Required to create a Bravado SwaggerClient instance: """
from bravado.client import SwaggerClient
""" Create a new Requests client instance: """
http_client = RequestsClient()
Отсюда вы можете делать все самое интересное, что позволяет делать Requests, например, установить базовую аутентификацию HTTP:
http_client.set_basic_auth(SERVER, USER, PASS)
Или отключите проверку сертификата SSL (не рекомендуется вне тестовой среды):
http_client.session.verify = False
Или, как указывают ваши вопросы и ответы, предоставьте местное хранилище сертификатов для проверки:
http_client.session.cert = os.environ.get('REQUESTS_CA_BUNDLE')
Оттуда просто создать экземпляр SwaggerClient, указав его путь к swagger.json и сослаться на экземпляр http_client запросов (с заранее заданными настройками), например, так:
URL = 'https://myserver/api/path/to/swagger.json'
client = Swaggerclient.from_url(URL, http_client=http_client)
Я отвечаю на свой вопрос здесь, так как я застрял на нем некоторое время и подумал, что было бы неплохо поделиться тем, что я узнал.
Поскольку задана переменная REQUESTS_CA_BUNDLE env var, мы можем создать нового клиента запросов, который настроен на использование CA Bundle. Это может быть передано в SwaggerClient для создания чего-то, что использует CA Bundle при выполнении вызовов Swagger API.
http_client = RequestsClient()
client.session.verify = os.environ.get('REQUESTS_CA_BUNDLE')
client = SwaggerClient.from_url(
reverse('grafana_generator:swaggerapi', request=request),
http_client=http_client,
)