42

我正在关注一个 api,我需要对我的用户 ID 和密码使用 Base64 身份验证。

'用户 ID 和密码都需要连接,然后进行 Base64 编码'

然后它显示了这个例子

'userid:password'

然后它继续说'在“授权标头”中提供编码值'

'例如:授权:BASIC {Base64 编码值} '

如何将其写入 python api 请求?

z = requests.post(url, data=zdata )

谢谢

4

6 回答 6

95

requests 库具有基本身份验证支持,并将自动为您编码。您可以通过在 python repl 中运行以下命令来测试它

from requests.auth import HTTPBasicAuth
r = requests.post(api_URL, auth=HTTPBasicAuth('user', 'pass'), data=payload)

您可以通过键入以下内容来确认此编码。

r.request.headers['Authorization']

输出:

u'Basic c2RhZG1pbmlzdHJhdG9yOiFTRG0wMDY4'
于 2014-02-21T21:19:36.027 回答
57

您可以通过执行以下操作对数据进行编码并发出请求:

import requests, base64

usrPass = "userid:password"
b64Val = base64.b64encode(usrPass)
r=requests.post(api_URL, 
                headers={"Authorization": "Basic %s" % b64Val},
                data=payload)

我不确定您是否必须在授权字段中添加“BASIC”字样。如果您提供API链接,它会更清楚。

于 2013-08-09T02:16:36.027 回答
20

使用 python3,我找到了一个适合我的解决方案:

import base64
userpass = username + ':' + password
encoded_u = base64.b64encode(userpass.encode()).decode()
headers = {"Authorization" : "Basic %s" % encoded_u}
于 2019-07-04T05:29:44.667 回答
6

如请求文档中所述https://2.python-requests.org/en/latest/user/authentication/

使用 HTTP Basic Auth 发出请求非常简单:

>>> from requests.auth import HTTPBasicAuth
>>> requests.get('https://api.github.com/user', auth=HTTPBasicAuth('user', 'pass'))
<Response [200]>

事实上,HTTP Basic Auth 是如此普遍,以至于 Requests 提供了一个方便的简写方式来使用它:

>>> requests.get('https://api.github.com/user', auth=('user', 'pass'))
<Response [200]>

在这样的元组中提供凭据与上面的 HTTPBasicAuth 示例完全相同。

于 2020-05-25T15:04:49.313 回答
2

我找到了“basicauth”包,它真的让我很开心。使用 pip 我们可以安装。

pip install basicauth

示例客户端代码:

from flask import request
import basicauth

username = request.form['username']
passwd = request.form['password']
encoded_creds = basicauth.encode(username, passwd)
headers = {
    "Authorization": "{0}".format(encoded_creds) # Replaces as "Authorization": "Basic WdfV0Adh4Kdf="
}
r = requests.post("http://10.0.0.1:8008/login"), headers=headers)
res = r.json()
print(res)

示例服务器端代码

import basicauth
from flask import request

authorization = request.headers.get('Authorization')
if authorization is not None and "Basic " in authorization:
    username, passwd = basicauth.decode(authorization)
    print(username, passwd)
于 2021-02-10T20:08:50.113 回答
1

我建议使用:

import request    
auth = ('username', 'password')
r = requests.post(url, auth=auth)

或者

import request
from requests.auth import HTTPBasicAuth
auth = HTTPBasicAuth('username', 'password')
r = requests.post(url, auth=auth)

https://2.python-requests.org/en/master/user/authentication/#basic-authentication

于 2021-11-06T00:33:33.217 回答