我正在尝试设置一个扭曲的 xmlrpc 服务器,它将接受来自客户端的文件,处理它们,并返回一个文件和结果字典。
我以前使用过 python,但从来没有使用过扭曲的库。出于我的目的,安全性不是问题,而 ssh 协议似乎有点过头了。它在 windows 服务器上也有问题,因为termios
不可用。
所以我所有的研究都指向 xmlrpc 是实现这一目标的最佳方式。但是,有两种可用的文件传输方法。使用xml binary data
方法,或http request
方法。
无论哪种方式,文件都可以达到几百兆,那么我应该使用哪种方法?示例代码表示赞赏,因为我找不到通过扭曲的 xml 进行文件传输的文档。
更新:
所以似乎序列化文件xmlrpclib.Binary
不适用于大文件,或者我用错了。测试代码如下:
from twisted.web import xmlrpc, server
class Example(xmlrpc.XMLRPC):
"""
An example object to be published.
"""
def xmlrpc_echo(self, x):
"""
Return all passed args.
"""
return x
def xmlrpc_add(self, a, b):
"""
Return sum of arguments.
"""
return a + b
def xmlrpc_fault(self):
"""
Raise a Fault indicating that the procedure should not be used.
"""
raise xmlrpc.Fault(123, "The fault procedure is faulty.")
def xmlrpc_write(self, f, location):
with open(location, 'wb') as fd:
fd.write(f.data)
if __name__ == '__main__':
from twisted.internet import reactor
r = Example(allowNone=True)
reactor.listenTCP(7080, server.Site(r))
reactor.run()
和客户端代码:
import xmlrpclib
s = xmlrpclib.Server('http://localhost:7080/')
with open('test.pdf', 'rb') as fd:
f = xmlrpclib.Binary(fd.read())
s.write(f, 'output.pdf')
xmlrpclib.Fault: <Fault 8002: "Can't deserialize input: ">
当我测试这个时我得到了。是因为文件是pdf吗?