Python 如何在Bravado中设置自定义http客户端?

Python 如何在Bravado中设置自定义http客户端?,python,swagger,Python,Swagger,我在用虚张声势3.0.0。我想发出一个将使用我自己的自定义CA包的请求。底层请求客户端没有利用我设置的Requests\u CA\u BUNDLEenv变量 如何传入使用CA捆绑包的自定义客户端?我在这里回答自己的问题,因为我在这方面已经有一段时间了,我想分享我学到的东西会很好 由于设置了REQUESTS\u CA\u BUNDLE env var,因此我们可以创建一个配置为使用CA BUNDLE的新REQUESTS客户端。可以将其传递到Swagger客户端,以生成在进行Swagger API调

我在用虚张声势3.0.0。我想发出一个将使用我自己的自定义CA包的请求。底层请求客户端没有利用我设置的
Requests\u CA\u BUNDLE
env变量


如何传入使用CA捆绑包的自定义客户端?

我在这里回答自己的问题,因为我在这方面已经有一段时间了,我想分享我学到的东西会很好

由于设置了REQUESTS\u CA\u BUNDLE env var,因此我们可以创建一个配置为使用CA BUNDLE的新REQUESTS客户端。可以将其传递到Swagger客户端,以生成在进行Swagger API调用时使用CA包的内容

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,
)
(此答案基于截至本文撰写之时的Bravado 8.1.0版本)

由于我在学习Bravado的过程中花了一段时间才找到这个答案,而且主要是因为我认为其他人在开始时可能会受益,下面是如何建立联系的最新研究:

为了利用HTTP客户端中的非默认设置(以请求为例),必须使用自己的设置创建一个新的HTTP客户端实例,然后将其传递给SwaggerClient。from_url()调用:

从这里,您可以执行请求允许您执行的所有有趣的操作,如设置基本HTTP身份验证:

http_client.set_basic_auth(SERVER, USER, PASS)
或禁用SSL证书验证(不建议在测试环境之外):

或者,正如您的问题和答案所指出的,提供一个本地证书存储来验证:

http_client.session.cert = os.environ.get('REQUESTS_CA_BUNDLE')
从这里开始,只需创建一个swagger客户端实例,将其指向swagger.json路径,并引用请求“http_client”实例(使用预定义设置),如下所示:

http_client.session.verify = False
http_client.session.cert = os.environ.get('REQUESTS_CA_BUNDLE')
URL = 'https://myserver/api/path/to/swagger.json'
client = Swaggerclient.from_url(URL, http_client=http_client)