我正在关注一个 api,我需要对我的用户 ID 和密码使用 Base64 身份验证。
'用户 ID 和密码都需要连接,然后进行 Base64 编码'
然后它显示了这个例子
'userid:password'
然后它继续说'在“授权标头”中提供编码值'
'例如:授权:BASIC {Base64 编码值} '
如何将其写入 python api 请求?
z = requests.post(url, data=zdata )
谢谢
我正在关注一个 api,我需要对我的用户 ID 和密码使用 Base64 身份验证。
'用户 ID 和密码都需要连接,然后进行 Base64 编码'
然后它显示了这个例子
'userid:password'
然后它继续说'在“授权标头”中提供编码值'
'例如:授权:BASIC {Base64 编码值} '
如何将其写入 python api 请求?
z = requests.post(url, data=zdata )
谢谢
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'
您可以通过执行以下操作对数据进行编码并发出请求:
import requests, base64
usrPass = "userid:password"
b64Val = base64.b64encode(usrPass)
r=requests.post(api_URL,
headers={"Authorization": "Basic %s" % b64Val},
data=payload)
我不确定您是否必须在授权字段中添加“BASIC”字样。如果您提供API链接,它会更清楚。
使用 python3,我找到了一个适合我的解决方案:
import base64
userpass = username + ':' + password
encoded_u = base64.b64encode(userpass.encode()).decode()
headers = {"Authorization" : "Basic %s" % encoded_u}
如请求文档中所述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 示例完全相同。
我找到了“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)
我建议使用:
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