如何在 Bravado 中设置自定义 http 客户端?
How do you set a custom http client in Bravado?
我正在使用 Bravado 3.0.0。我想提出一个使用我自己的自定义 CA Bundle 的请求。底层请求客户端没有利用我设置的 REQUESTS_CA_BUNDLE
环境变量。
如何传入使用我的 CA 捆绑包的自定义客户端?
我在这里回答我自己的问题,因为我在这个问题上停留了一段时间,认为分享我学到的东西会很好。
由于设置了 REQUESTS_CA_BUNDLE env var,我们可以创建一个新的请求客户端,该客户端被配置为使用 CA Bundle。可以将其传递到 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,
)
(此答案基于 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)
我正在使用 Bravado 3.0.0。我想提出一个使用我自己的自定义 CA Bundle 的请求。底层请求客户端没有利用我设置的 REQUESTS_CA_BUNDLE
环境变量。
如何传入使用我的 CA 捆绑包的自定义客户端?
我在这里回答我自己的问题,因为我在这个问题上停留了一段时间,认为分享我学到的东西会很好。
由于设置了 REQUESTS_CA_BUNDLE env var,我们可以创建一个新的请求客户端,该客户端被配置为使用 CA Bundle。可以将其传递到 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,
)
(此答案基于 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)