通过Python请求发送授权令牌头

时间:2016-10-30 21:25:29

标签: python api authorization python-requests token

我正在尝试使用需要授权令牌的API和Python 2.7的请求库。 API文档提供了curl的示例代码:

curl <url> \
  -is \
  -X GET \
  -H 'Accept: application/vnd.rn+json' \
  -H 'Content-Type: application/vnd.rn+json' \
  -H 'Authorization: Token token="<hexstring>"'

我如何将其转换为请求的正确语法,并检查状态?我尝试过一些事情,但没有一件事有效:

import requests
url = '<url>'
header = {'Authorization':'<hexstring>'}
r = requests.get(url,header)
print r.status_code

import requests
url = '<url>'
token = '<hexstring>'
header = {'Authorization':token}
r = requests.get(url,header)
print r.status_code

甚至

import requests
url = '<url>'
header = {'Authorization':'Authorization: Token token="<hexstring>"'}
r = requests.get(url,header)
print r.status_code

所有东西都保持返回401状态,因此令牌没有正确通过。有关如何正确做到这一点的任何想法?感谢。

编辑:我想我应该添加 - 我正在使用的令牌是正确的,所以这不是问题。

1 个答案:

答案 0 :(得分:0)

如果您使用的是 AWS API Gateway,则授权标头必须有“Bearer”后跟一个空格。这是“GET”请求的示例。 POST 将需要请求中的正文。您可能还需要为

添加标题
  • 接受:application/json
  • 内容类型:application/json

#!/usr/bin/env python3

import requests

api_name = "my_api"
amazon_region = "us-east-1"
url = f"https://{api_name}.execute-api.{amazon_region}.aws.com/Prod"

token = "some-long-string"
headers = {"Authorization": f"Bearer {token}"}

r = requests.get(url, headers=headers)
print(r.json())