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

  • 相关阅读:
    JAVA内部类详解
    表、栈和队列
    大型网站架构演化<二>
    eclipse中build path 中JDK与java compiler compliance level的问题(转)
    XFire构建服务端Service的两种方式
    SpringMVC简单例子
    Mybatis
    java静态代码块 类加载顺序问题。
    Tomcat6.0数据源配置
    解析xml的几种方式
  • 原文地址:https://www.cnblogs.com/dkblog/p/2282436.html
Copyright © 2011-2022 走看看