您的位置:首页 > 其它

一个base64引发的血案

2017-08-31 16:56 232 查看
结果发现header跟body之间多了一个换行符('\r\n'),http协议默认header和body之间有一个空行隔开,也就是一个只含有\r\n的行,但是多了一个\r\n,就会导致服务器取body的时候从这个多出来的\r\n开始取content-length个字符,这样body里最后的两个字符就被这个多出来的\r\n挤掉了

而通过观察,这个原因是由于header的最后一个字段Authorization: Basic eHh4eHh4eDp4eHh4eHh4后面多了一个"\n"导致,

这个字段的值是同事经过base64.encodestring("XXXXXX:XXXXXX")编码后得到的字符串,查看了一下python的lib doc,发现这个函数默认返回一个以"\n"结尾的字符串,这就这个问题的根本原因,replace掉其中的\n,一切就都OK了

base64.encodestring返回的字符串默认结尾带"\n",而且产生的base64编码字符串每76个字符就会用"\n"隔开,所以最安全的方法不是strip去掉结尾的\n,而是用replace去掉其中所有的\n。为啥base64.ecodestring每76字符就换行,这个是mime协议的规定,用于email发送,具体查看mime协议吧
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: