我使用的是Bravado 3.0.0。我想发出一个使用我自己的自定义CA Bundle的请求。基础请求客户端没有利用我设置的REQUESTS_CA_BUNDLE
env var。
如何传入使用我的CA Bundle的自定义客户端?
答案 0 :(得分:5)
(这个答案是基于当前的写作版本的Bravado 8.1.0版本)
因为在学习Bravado时我甚至花了一些时间才找到这个答案,而且主要是因为我认为其他人在开始时可能会受益,这里有一个关于如何建立连接的更新内容:
为了利用HTTP客户端中的非默认设置(使用Requests作为示例),必须使用自己的设置创建新的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路径,引用Requests'http_client'实例(使用预定义的设置)就像这样简单:
URL = 'https://myserver/api/path/to/swagger.json'
client = Swaggerclient.from_url(URL, http_client=http_client)
答案 1 :(得分:1)
我在这里回答我自己的问题,因为我被困在这一段时间,并认为分享我所学到的东西会很好。
由于设置了REQUESTS_CA_BUNDLE env var,因此我们可以创建一个配置为使用CA Bundle的新Requests客户端。这可以传递给SwaggerClient,以便在进行Swagger API调用时生成使用CA Bundle的东西。
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,
)