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

  • 相关阅读:
    sql分页 sql server,oracle,db2,mysql
    部分SQL优化
    javascript &&和||的其他用法
    socket 套接字
    网络协议篇
    异常处理
    元类type 反射 函数与方法 双下方法
    私有 实例方法 类方法 静态方法 属性 issubclass isinstance区别
    面向对象的三大特性 鸭子类型 类的约束 super的深度剖析
    继承
  • 原文地址:https://www.cnblogs.com/dkblog/p/2282436.html
Copyright © 2011-2022 走看看