Python Gmail Checker:授权的Base64问题

时间:2012-09-14 12:55:44

标签: python-3.x gmail base64

我有一个python脚本,我拼凑在一起,通过rss feed检查我的Gmail,并将文本输出到屏幕。它适用于python 2.6.6,但我没有成功使它在python 3.2.3下工作。 我用2to3来转换它。代码在这里:https://www.dropbox.com/s/b1277mi7vc7hv3f/gmailcheckparseconky.py3

ObtainEmailFeed函数中出现问题。

当我使用

时,我遇到了可怕的“TypeError("expected bytes, not %s" % s.__class__.__name__)”错误

b64auth = base64.encodestring("%s:%s" % (user, password))

但是当我使用

string = bytes("%s:%s" % (user,password), 'utf-8')
string2=str(string,'utf-8')
b64auth = base64.encodestring( string)

我得到了

auth = "Basic " + b64auth
TypeError: Can't convert 'bytes' object to str implicitly

似乎将整个问题带回了整整一圈。

我在我的密码中尝试使用硬编码作为文本,但这不起作用。我得到了 我设置`auth =“基本用户:密码”

urllib.error.HTTPError: HTTP Error 401: Unauthorized

正如我所说,我把代码拼凑在一起。我不完全理解gmail需要授权的内容。继续这一点,我更倾向于帮助修复这段代码,这样我就可以学习并更好地理解python而不是指向网络上的另一个脚本,它与我正在做的事情做同样/类似的事情

提前致谢, 尼克

1 个答案:

答案 0 :(得分:0)

从python3开始,字节和字符串之间存在区别。该错误来自于base64.encodestring现在是encodebytes的弃用别名(另请参阅:http://docs.python.org/py3k/library/base64.html#module-base64),因此它希望您提供字节,并且它将为您提供字节数

您可能想要这样做:

string = bytes("%s:%s" % (user,password), 'utf-8')
b64bytes = base64.encodebytes(string)
b64auth = b64bytes.decode('ascii')

然后b64auth将是一个字符串,您将能够在其余代码中将其用作字符串。