如何向Bravado创建的API客户端添加授权标头

时间:2019-05-13 16:31:20

标签: python swagger bravado

我可以使用node.js模块创建一个简单的API接口,该接口可以正确进行身份验证并从API接收响应。但是,当我尝试使用bravado时,要从一个大文件中创建客户端,然后手动将授权令牌添加到头部,它会失败:

requests

我相信我正在正确添加授权标头。

下面是我用来创建客户端的代码。如图所示,我尝试了两种添加授权令牌的方法:

  • 通过bravado.exception.HTTPUnauthorized: 401 Unauthorized: Error(code=u'invalid_credentials', message=u'Missing authorization header', http_client设置中
  • set_api_key步骤中,添加Swagger.from_url(...)

但是,这两个选项均失败。

request_headers

我的问题是,如何正确地向bravado SwaggerClient添加授权标头?

2 个答案:

答案 0 :(得分:0)

作为参考,一种可能的解决方案是在每个请求中添加_request_options

from bravado.client import SwaggerClient

headers = {
  'Authorization': 'Bearer <YOUR_TOKEN>'
}

requestOptions = {
   # === bravado config ===
   'headers': headers,
}

client = SwaggerClient.from_url("<SWAGGER_JSON_URL>")

result = client.<ENTITY>.<ACTION>(_request_options=requestOptions).response().result
print(result)

但是,我仍然无法使用的更好的解决方案是让它根据每个请求自动进行身份验证。

答案 1 :(得分:0)

再试一次,修复set_api_key行的主机。

from bravado.requests_client import RequestsClient
from bravado.client import SwaggerClient

http_client = RequestsClient()
http_client.set_api_key(
    'api.optimizely.com', 'Bearer <TOKEN>',
    param_name='api_key', param_in='header'
)
client = SwaggerClient.from_url(
    'https://api.optimizely.com/v2/swagger.json',
    http_client=http_client,
)

在这里您将找到有关该方法的文档:https://github.com/Yelp/bravado/blob/master/README.rst#example-with-header-authentication