2

我能够使用requests正确验证并从 API 接收响应的模块创建一个简单的 API 接口。但是,当我尝试使用虚张声势,从 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?

4

2 回答 2

1

再试一次,修复 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

于 2020-01-10T12:52:07.737 回答
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)

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

于 2019-05-15T12:33:40.213 回答