122

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

但这些都不起作用。

4

9 回答 9

134

在蟒蛇中:

('<MY_TOKEN>')

相当于

'<MY_TOKEN>'

并要求翻译

('TOK', '<MY_TOKEN>')

当您希望请求使用基本身份验证并制作授权标头时,如下所示:

'VE9LOjxNWV9UT0tFTj4K'

哪个是 base64 表示'TOK:<MY_TOKEN>'

要传递您自己的标题,您可以像这样传递字典:

r = requests.get('<MY_URI>', headers={'Authorization': 'TOK:<MY_TOKEN>'})
于 2013-09-29T00:01:02.097 回答
49

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

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

希望这可以帮助某人:)

于 2015-06-18T08:20:14.403 回答
36

这对我有用:

access_token = #yourAccessTokenHere#

result = requests.post(url,
      headers={'Content-Type':'application/json',
               'Authorization': 'Bearer {}'.format(access_token)})
于 2017-12-06T18:35:56.157 回答
20

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

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

with requests.Session() as s:

    s.headers.update(HEADERS)
    resp = s.get('http://example.com/')
于 2017-10-31T19:37:42.447 回答
6

我在这里成立,我可以使用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()
于 2020-01-05T11:23:37.627 回答
4

Requests 原生支持基本身份验证,仅使用用户传递参数,不使用令牌。

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

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

另一种方法是制定一个自定义标题,正如其他用户在这里所建议的那样。

于 2019-08-14T15:12:39.347 回答
3

你可以试试这样的

r = requests.get(ENDPOINT, params=params, headers={'Authorization': 'Basic %s' %  API_KEY})
于 2017-09-12T06:17:50.373 回答
2

This worked for me:

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

My code uses user generated token.

于 2020-01-26T16:02:08.790 回答
0

You have a request needing an authorization maybe you have a result 401.

Suppose your request is like this :

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

You have your token :

TOKEN = 'fliuzabuvdgfnsuczkncsq12454632'

build your header like this :

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

and use it like this :

req.get(REQ, headers=HEADER)

display your result like this :

req.get(COACH, headers=HEADER).json()
于 2021-04-07T10:30:13.910 回答