Python 请求库如何使用单个令牌传递 Authorization 头

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

但这些都不管用。

331847 次浏览

在巨蟒中:

('<MY_TOKEN>')

相当于

'<MY_TOKEN>'

并要求翻译

('TOK', '<MY_TOKEN>')

当您希望请求使用基本身份验证并像下面这样制作一个授权头文件时:

'VE9LOjxNWV9UT0tFTj4K'

这是 'TOK:<MY_TOKEN>'的基64表示

要传递自己的头文件,你需要像这样在字典中传递:

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

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

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

“ auth”有两个参数: username 和 password,因此实际的语句应该是

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

在我的例子中,没有密码,因此我将 auth 字段中的第二个参数保留为空,如下所示:

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

希望这对某些人有所帮助:)

你可以试试这个

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

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

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


with requests.Session() as s:


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

这对我很有效:

access_token = #yourAccessTokenHere#


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

请求本身只支持用户通过参数的基本身份验证,而不支持令牌。

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

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))

另一种方法是制定一个自定义标头,就像这里的其他用户建议的那样。

我在这里找到的,在 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()

这对我很有效:

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

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

您有一个需要授权的请求,也许您有一个结果 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()