Base64身份验证Python

Mar*_*cus 26 python authentication api passwords request

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

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

然后它显示了这个例子

'userid:password'
Run Code Online (Sandbox Code Playgroud)

然后它继续说'在"授权标题"中提供编码值"

'例如:授权:BASIC {Base64-encoded value} '

如何将其写入python api请求?

z = requests.post(url, data=zdata )
Run Code Online (Sandbox Code Playgroud)

谢谢

Jos*_*osh 57

请求库具有Basic Auth支持,并将自动为您编码.您可以通过在python repl中运行以下命令来测试它

from requests.auth import HTTPBasicAuth
r = requests.post(api_URL, auth=HTTPBasicAuth('user', 'pass'), data=payload)
Run Code Online (Sandbox Code Playgroud)

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

r.request.headers['Authorization']
Run Code Online (Sandbox Code Playgroud)

输出:

u'Basic c2RhZG1pbmlzdHJhdG9yOiFTRG0wMDY4'
Run Code Online (Sandbox Code Playgroud)

  • 我会建议这个答案而不是已接受的答案。它是独立于“python-version”的。 (2认同)

Alf*_*eme 37

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

import requests, base64

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

我不确定您是否要在授权字段中添加"BASIC"字样.如果您提供API链接,那就更清楚了.

  • 在 python3 中,我得到 `TypeError: a bytes-like object is required, not 'str'` (8认同)

小智 15

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

import base64
userpass = username + ':' + password
encoded_u = base64.b64encode(userpass.encode()).decode()
headers = {"Authorization" : "Basic %s" % encoded_u}
Run Code Online (Sandbox Code Playgroud)

  • @MichaelCox这是因为 base64.b64encode() 函数运行并返回 /bytes/,而不是字符串。因此,首先您必须获取字符串,然后对其进行编码()以获取该字符串的等效字节。然后对其进行处理(b64encode() 字节),这会返回另一个字节结果。然后必须再次对该结果进行解码以将其恢复为正常字符串。 (2认同)

T.M*_*.M. 5

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

使用 HTTP 基本身份验证发出请求非常简单:

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

事实上,HTTP Basic Auth 非常普遍,以至于 Requests 为使用它提供了一个方便的速记:

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

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