zoukankan      html  css  js  c++  java
  • 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形式的数据了,可以直接传送了。不能打包之后立即解包。

    from:http://blog.robotercoding.com/?cat=5&paged=2

  • 相关阅读:
    svn 提交时强制注释、不允许指定的文件类型的钩子写法
    开源跨平台网络库(lxnet)
    关于android studio的配置记录
    一般处理程序(ashx)对session处理摘要
    利用反射代替switch -转
    c#+jquery.autocomplete.js
    C#+ajaxupload实现图片上传
    几种常见SQL分页方式效率比较-转
    js页面跳转
    C#编码规范-转
  • 原文地址:https://www.cnblogs.com/dkblog/p/2282436.html
Copyright © 2011-2022 走看看