如何注册返回base64Binary类型的XML-RPC函数?
解决XML-RPC返回xsd:base64Binary类型的问题
你遇到的问题根源是XML-RPC的base64类型需要用框架提供的专用包装类标记,而不是直接传编码函数。SimpleXMLRPCServer(Python2)或xmlrpc.server(Python3)里自带了对应类型,直接用就行:
修正步骤
- 导入对应版本的
Binary类:- Python2:
from xmlrpclib import Binary - Python3:
from xmlrpc.client import Binary
- Python2:
- 在你的
speech函数里,把生成的MP3二进制数据用Binary包装后返回 - 注册函数时,
returns参数里指定对应字段为Binary类型
修正后的代码示例
# Python2 版本 from SimpleXMLRPCServer import SimpleXMLRPCServer from xmlrpclib import Binary # 假设你的speech函数逻辑如下 def speech(frase): # 生成MP3二进制数据(示例用模拟数据代替实际生成逻辑) mp3_binary_data = b"actual mp3 binary content here" # 用Binary包装二进制数据 return {"mp3": Binary(mp3_binary_data)} dispatcher = SimpleXMLRPCServer(("localhost", 8000)).dispatcher # 注册函数时指定returns类型为Binary dispatcher.register_function('fala', speech, args={'frase': str}, returns={'mp3': Binary})
原理说明
XML-RPC的序列化器会自动识别Binary包装类,将其序列化为xsd:base64Binary类型的XML元素,无需手动调用b64encode——框架会自动完成编码和类型标记工作。你之前直接传入b64encode函数,序列化器无法识别这个类型,因此抛出了类型错误。
内容的提问来源于stack exchange,提问作者Gerson Souto
相关产品推荐
相关产品推荐

