spyne html编码,哪个python soap客户端支持spyne二进制类型?

我想调用一个spyne二进制类型作为参数的Web服务方法。 但我无法找到任何支持它的python soap客户端。哪个python soap客户端支持spyne二进制类型?

调试我的问题,我做了应该打印一个文件一个简单的Web服务方法:

# @srpc(Attachment, _returns=Unicode)

@srpc(ByteArray, _returns=Unicode)

# @srpc(File, _returns=Unicode)

# @srpc(Unicode, _returns=Unicode)

def print_file(file_content):

logger.info(u"print file:\n{}\ntype:{}".format(file_content, file_content.__class__))

return u''

正如你所看到的,我试着用3种spyne二进制类型。 对于调试,我也尝试过使用Unicode,并将文件内容传递给base64,在这种情况下没有问题。 因此,Web服务是可操作的。

服务器端是一个Django应用程序和spyne应用程序。 我的问题是在客户端。 泡沫,获得的错误是非常模糊的,并没有解决方案存在根据论坛。

我尝试了所有在https://wiki.python.org/moin/WebServices#SOAP上描述的SOAP客户端,使用python 2.7和3.3。 当序列化spyne二进制对象时,它们在构建请求时都失败。

我最后的尝试是与zeep。 我用wsdl本地url实例化zeep客户端。 对不起,wsdl不公开。

我把这种方法用一个空的ByteArray:

param = ByteArray()

client.service.print_file(param)

的擦肩而过的例外是:

File "/usr/lib/python2.7/site-packages/zeep/client.py", line 41, in __call__

self._op_name, args, kwargs)

File "/usr/lib/python2.7/site-packages/zeep/wsdl/bindings/soap.py", line 107, in send

options=options)

File "/usr/lib/python2.7/site-packages/zeep/wsdl/bindings/soap.py", line 65, in _create

serialized = operation_obj.create(*args, **kwargs)

File "/usr/lib/python2.7/site-packages/zeep/wsdl/definitions.py", line 165, in create

return self.input.serialize(*args, **kwargs)

File "/usr/lib/python2.7/site-packages/zeep/wsdl/messages/soap.py", line 48, in serialize

self.body.render(body, body_value)

File "/usr/lib/python2.7/site-packages/zeep/xsd/elements.py", line 333, in render

self._render_value_item(parent, value)

File "/usr/lib/python2.7/site-packages/zeep/xsd/elements.py", line 354, in _render_value_item

return self.type.render(node, value)

File "/usr/lib/python2.7/site-packages/zeep/xsd/types.py", line 356, in render

element.render(parent, element_value)

File "/usr/lib/python2.7/site-packages/zeep/xsd/indicators.py", line 189, in render

element.render(parent, element_value)

File "/usr/lib/python2.7/site-packages/zeep/xsd/elements.py", line 333, in render

self._render_value_item(parent, value)

File "/usr/lib/python2.7/site-packages/zeep/xsd/elements.py", line 354, in _render_value_item

return self.type.render(node, value)

File "/usr/lib/python2.7/site-packages/zeep/xsd/types.py", line 180, in render

parent.text = self.xmlvalue(value)

File "/usr/lib/python2.7/site-packages/zeep/xsd/builtins.py", line 83, in _wrapper

return func(self, value)

File "/usr/lib/python2.7/site-packages/zeep/xsd/builtins.py", line 357, in xmlvalue

return base64.b64encode(value)

File "/usr/lib64/python2.7/base64.py", line 53, in b64encode

encoded = binascii.b2a_base64(s)[:-1]

TypeError: must be convertible to a buffer, not ModelBaseMeta

有谁知道是否有与ZEEP的解决方案?

也许有专用的zeep插件?

或者还有其他解决方案吗?

也许在C/C++中,编译为python包?

埃里克

========================================= ===================

==解决方案

由于我在这个问题上浪费了很多时间,下面是我的解决方案。

最后我还需要文件名,不仅是文件数据。 spyne.model.binary.File类型应该是完美的,但它不能被串行化为SOAP格式。

感谢与布拉克讨论,最终的解决方案是创建一个定制的ComplexType像:

class File(ComplexModel):

filename = Unicode

data = ByteArray

在具有泡沫客户端,直接与base64编码的数据替换的ByteArray字段:

f = File()

data = open({FILENAME}, "rb").read()

f.data = base64.b64encode(data)

在服务器端,f.data将直接包含解码的数据。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值