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

问题描述 投票:56回答:5

我有一个请求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>'))

但这些都不起作用。

python get authorization token python-requests
5个回答
67
投票

在python中:

('<MY_TOKEN>')

相当于

'<MY_TOKEN>'

并请求解释

('TOK', '<MY_TOKEN>')

由于您希望请求使用基本身份验证并创建一个授权标头,如下所示:

'VE9LOjxNWV9UT0tFTj4K'

这是'TOK:<MY_TOKEN>'的base64表示

要传递自己的标题,您可以传入一个字典,如下所示:

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

25
投票

我正在寻找类似的东西,遇到了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', ''))

希望这有助于某人:)


17
投票

这对我有用:

access_token = #yourAccessTokenHere#

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

12
投票

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

TOKEN = 'abcd0123'
HEADERS = {'Authorization': 'token {}'.format(TOKEN)}

with requests.Session() as s:

    s.headers.update(HEADERS)
    resp = s.get('http://example.com/')

1
投票

你可以尝试这样的事情

r = requests.get(ENDPOINT, params=params, headers={'Authorization': 'Basic %s' %  API_KEY})
© www.soinside.com 2019 - 2024. All rights reserved.