在此示例中,我将使用shipstation的api,但此问题适用于所有使用oAuth令牌的api。
ShipStation API使用基本HTTP身份验证。 Authorization标头的构造如下:
用户名(
API_KEY
)和密码(API_SECRET
)组合成字符串“ username:password”然后使用Base64的RFC2045-MIME变体对结果字符串进行编码,但不限于76个字符/行
然后将授权方法和空格(即“基本”)放在编码的字符串之前。
例如,如果给定的
API_KEY
是'ShipStation',而API_SECRET
是'Rocks',则标题的格式如下:授权:基本U2hpcFN0YXRpb246Um9ja3M =
容易吗?我的第一次尝试:
import base64
KEY = 'ShipStation'
SECRET = 'Rocks'
AUTH = bytes(str(KEY) + ':' + str(SECRET), encoding='utf-8')
TOKEN = base64.b64encode(AUTH)
AUTH_TOKEN = 'Basic ' + str(TOKEN)
print(AUTH_TOKEN) # Basic b'U2hpcFN0YXRpb246Um9ja3M='
如您所见,我制作的AUTH_TOKEN
在开头有一个附加的b'
,在结尾有一个'
,在您发送请求时会产生401。
这是我的解决方法:
import base64
KEY = 'ShipStation'
SECRET = 'Rocks'
AUTH = bytes(str(KEY) + ':' + str(SECRET), encoding='utf-8')
TOKEN = str(base64.b64encode(AUTH))
AUTH_TOKEN = 'Basic ' + TOKEN[2:len(TOKEN)-1]
print(AUTH_TOKEN) # Basic U2hpcFN0YXRpb246Um9ja3M=
尽管上面的代码有效,但这显然不是预期的方式。 (我想是吗?)
将上面示例中的TOKEN
转换为正确格式的 pythonic 方法是什么?