python3 base64 url docode 报错: binascii.Error: Incorrect padding
使用golang 对url进行base64 编码,然后用python3 代码对编码结果进行解码,python 代码抛出一下异常, 经过分析和查询文档得知,由于base64编码结果必须是4的整数倍,缺少的字符可以用"="填充,最少填充一个,最多填充三个即可,填充方法:s += b’=’ * (-len(s)%4)
1. 错误信息
Traceback (most recent call last):
File “d:/GitCode/AutoTest/tools/download.py”, line 69, in
upload_url = get_upload_url()
File “d:/GitCode/AutoTest/tools/download.py”, line 27, in get_upload_url
return url_decode(reponse[“data”])
File “d:/GitCode/AutoTest/tools/download.py”, line 12, in url_decode
return base64.urlsafe_b64decode(data).decode(“utf-8”)
File “C:\Python\Python38\lib\base64.py”, line 133, in urlsafe_b64decode
return b64decode(s)
File “C:\Python\Python38\lib\base64.py”, line 87, in b64decode
return binascii.a2b_base64(s)
binascii.Error: Incorrect padding
2. golang 代码
import (
"encoding/base64"
"fmt"
)
func main() {
uri := []byte("http://127.0.0.1:9000/api/project/s")
// 对url进行base64编码
encuri := base64.RawURLEncoding.EncodeToString([]byte(uri))
fmt.Println(encuri)//aHR0cDovLzEyNy4wLjAuMTo5MDAwL2FwaS9wcm9qZWN0L3M
}
3. python 代码
#-*- coding:utf-8 -*-
import base64
s = b'''aHR0cDovLzEyNy4wLjAuMTo5MDAwL2FwaS9wcm9qZWN0L3M'''
print(len(s))#47
#填充 "=" , 使被解码串为4的整数倍
s += b'=' * (-len(s)%4)
print(len(s))#47
print(base64.urlsafe_b64decode(s).decode("utf-8"))# http://127.0.0.1:9000/api/project/s