python xmlrpclib base64编码
在xmlrpclib中,需要传送二进制的数据,因此使用了Binary Objects来打包,写了如下两个函数:
def encodebindata(data):
out = StringIO.StringIO()
bin = xmlrpclib.Binary()
bin.data = data
bin.encode(out)
data2 = out.getvalue()
return data2
def decodebindata(data):
bin = xmlrpclib.Binary()
data1 = bin.decode(data)
return bin.data
在调用decodebindata函数解码的时候,老是出错,提示”binascii.Error: incorrect padding”之类的。看了一下xmlrpclib.py里面的Binary 类定义:
def decode(self, data):
self.data = base64.decodestring(data)
def encode(self, out):
out.write(”<value><base64>n”)
base64.encode(StringIO.StringIO(self.data), out)
out.write(”</base64></value>n”)
Binary的编解码其实用到的是base64的decodestring和encode,感觉不太匹配,base64中,encode应该和decode配对,decodestring和encodestring配对。因此尝试了一下直接使用base64来打包,不使用xmlrpclib的Binary Objects。重新定义两个函数如下:
def encodebindata(data):
out = StringIO.StringIO()
bin = StringIO.StringIO(data)
base64.encode(bin,out)
data2 = out.getvalue()
return data2
def decodebindata(data):
out = StringIO.StringIO()
bin = StringIO.StringIO(data)
base64.decode(bin,out)
data2 = out.getvalue()
return data2
经过测试,没有任何问题了
xmlrpclib的Binary Objects打包之后就是xml形式的数据了,可以直接传送了。不能打包之后立即解包。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!