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



我能够使用requests模块来创建一个简单的API接口,该模块可以正确身份验证并从API接收响应。但是,当我尝试使用Bravado,从Swagger文件中创建客户端,并在头部手动添加授权令牌时,它会失败:

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

但是两个选项都失败了。

from bravado.requests_client import RequestsClient
from bravado.client import SwaggerClient
http_client = RequestsClient()
http_client.set_api_key(
    'https://api.optimizely.com/v2', 'Bearer <TOKEN>',
    param_name='Authorization', param_in='header'
)

headers = {
    'Authorization': 'Bearer <TOKEN>',
}
client = SwaggerClient.from_url(
    'https://api.optimizely.com/v2/swagger.json',
    http_client=http_client,
    request_headers=headers
)

我的问题是,如何将授权标题正确添加到Bravado SwaggerClient?

供参考,可能的解决方案是在每个请求中添加_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)

但是,一个更好的解决方案,我仍然无法工作,就是要自动对每个请求进行身份验证。

再试一次,修复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/master/readme.rst#example-with-with-header-authentication

相关内容

  • 没有找到相关文章

最新更新