在Python 3中,我正在传递凭据以对API调用进行身份验证,并且使用以下行可以完全正常工作:
userAndPass = b64encode(b"username:password").decode("ascii")
出于安全目的,我更愿意在外部存储凭据(可能是yaml文件或其他位置),而不是对其进行硬编码。我试图替换用户名并使用变量传递,但这似乎不起作用。我试过将变量“凭据”放在方括号中,并尝试在手前添加一个加号,但均无效。
我希望它可以按以下方式工作:
credentials = "username:password"
userAndPass = b64encode(b'credentails').decode("ascii")
任何建议都值得赞赏!
答案 0 :(得分:2)
在这种情况下,您以错误的方式传递了变量。
b64encode(b'credentails')
的意思是对字节数组[c,r,e,d,e,n,t,i,a,l,s]进行编码。
像这样使用它:
credentials = b"username:password"
userAndPass = b64encode(credentails).decode("ascii")
如果您希望以其他方式获得凭证:
credentials = somehow_get_credentials_as_string()
bytes_credentials = credentials.encode('utf-8') # or whatever the encoding is
userAndPass = b64encode(bytes_credentials).decode("ascii")
答案 1 :(得分:1)
requests
可让您传递auth
元组,例如:
username = 'Antonio'
password = 'xx1234xx'
user_pass = (username, password)
res = requests.get('https://www.example.com/fetch', auth=user_pass)