Python请求库如何使用单个标记传递Authorization标头

时间:2013-09-28 17:25:29

标签: python get authorization token python-requests

我有一个请求URI和一个令牌。如果我使用:

curl -s "<MY_URI>" -H "Authorization: TOK:<MY_TOKEN>"

等,我得到200并查看相应的JSON数据。 所以,我安装了请求,当我尝试访问此资源时,我得到403可能是因为我不知道传递该令牌的正确语法。任何人都可以帮我搞清楚吗? 这就是我所拥有的:

import sys,socket
import requests

r = requests.get('<MY_URI>','<MY_TOKEN>')
r. status_code

我已经尝试过:

r = requests.get('<MY_URI>',auth=('<MY_TOKEN>'))
r = requests.get('<MY_URI>',auth=('TOK','<MY_TOKEN>'))
r = requests.get('<MY_URI>',headers=('Authorization: TOK:<MY_TOKEN>'))

但这些都不起作用。

9 个答案:

答案 0 :(得分:65)

在python中:

('<MY_TOKEN>')

相当于

'<MY_TOKEN>'

请求解释

('TOK', '<MY_TOKEN>')

如果您希望请求使用基本身份验证并创建如下的授权标头:

'VE9LOjxNWV9UT0tFTj4K'

这是'TOK:<MY_TOKEN>'

的base64表示形式

要传递您自己的标题,您需要传递一个字典:

r = requests.get('<MY_URI>', headers={'Authorization': 'TOK:<MY_TOKEN>'})

答案 1 :(得分:24)

我正在寻找类似的东西并遇到了this。它看起来像你提到的第一个选项

r = requests.get('<MY_URI>', auth=('<MY_TOKEN>'))

“auth”有两个参数:用户名和密码,因此实际的语句应为

r=requests.get('<MY_URI>', auth=('<YOUR_USERNAME>', '<YOUR_PASSWORD>'))

在我的情况下,没有密码,所以我将auth字段中的第二个参数留空了,如下所示:

r=requests.get('<MY_URI', auth=('MY_USERNAME', ''))

希望这有助于某人:)

答案 2 :(得分:17)

这对我有用:

access_token = #yourAccessTokenHere#

result = requests.post(url,
      headers={'Content-Type':'application/json',
               'Authorization': 'Bearer {}'.format(access_token)})

答案 3 :(得分:12)

您还可以为整个会话设置标题:

opacity

答案 4 :(得分:2)

我在这里建立了,我也可以在这里创建Linkedin: https://auth0.com/docs/flows/guides/auth-code/call-api-auth-code 所以我的带有linkedin的代码在这里登录:

ref = 'https://api.linkedin.com/v2/me'
headers = {"content-type": "application/json; charset=UTF-8",'Authorization':'Bearer {}'.format(access_token)}
Linkedin_user_info = requests.get(ref1, headers=headers).json()

答案 5 :(得分:1)

这对我有用:

r = requests.get('http://127.0.0.1:8000/api/ray/musics/', headers={'Authorization': 'Token 22ec0cc4207ebead1f51dea06ff149342082b190'})

我的代码使用用户生成的令牌。

答案 6 :(得分:0)

您可以尝试这样的事情

r = requests.get(ENDPOINT, params=params, headers={'Authorization': 'Basic %s' %  API_KEY})

答案 7 :(得分:0)

请求本身仅通过用户传递参数而不是令牌支持基本身份验证。

如果需要,可以添加以下类以使请求支持基于令牌的基本身份验证:

import requests
from base64 import b64encode

class BasicAuthToken(requests.auth.AuthBase):
    def __init__(self, token):
        self.token = token
    def __call__(self, r):
        authstr = 'Basic ' + b64encode(('token:' + self.token).encode('utf-8')).decode('utf-8')
        r.headers['Authorization'] = authstr
        return r

然后,要使用它,请运行以下请求:

r = requests.get(url, auth=BasicAuthToken(api_token))

一种替代方法是,像在此其他用户所建议的那样,制定一个自定义标头。

答案 8 :(得分:0)

您有一个需要授权的请求,也许您有结果 401

假设你的请求是这样的:

REQ ='https://api.asite.com/something/else/else'

你有你的令牌:

TOKEN = 'fliuzabuvdgfnsuczkncsq12454632'

像这样构建你的标题:

HEADER = {'Authorization': f'{TOKEN}'}

并像这样使用它:

req.get(REQ, headers=HEADER)

像这样显示你的结果:

req.get(COACH, headers=HEADER).json()