我在另一个平台上有一个xml-rpc服务器,该服务器注册了ping
函数:
(defun ping ()
(format t "ping~%"))
(import 'ping :s-xml-rpc-exports)
不需要参数。
Python端,客户端将其称为:
core_client = ServerProxy("http://localhost:{}".format(LISP_RPC_PORT), verbose=True)
core_client.ping()
但是我得到一个错误,一个虚假的换行符被作为参数。
Python跟踪:
send: b'POST /RPC2 HTTP/1.1\r\nHost: localhost:8081\r\nAccept-Encoding: gzip\r\nContent-Type: text/xml\r\nUser-Agent: Python-xmlrpc/3.6\r\nContent-Length: 98\r\n\r\n'
send: b"<?xml version='1.0'?>\n<methodCall>\n<methodName>ping</methodName>\n<params>\n</params>\n</methodCall>\n"
以换行符作为参数:
<params>\n</params>
因此客户端出错了:
The value\n "\n"\n\nis not of type\n LIST
考虑到标准,我不是100%肯定这种行为是错误的:
如果过程调用具有参数,则必须包含一个子项。子项目可以包含任意数量的,每个都有一个。
但是考虑到CPython的注释,这似乎是错误的:
# FIXME: the xml-rpc specification allows us to leave out
# the entire <params> block if there are no parameters.
# however, changing this may break older code (including
# old versions of xmlrpclib.py), so this is better left as
# is for now. See @XMLRPC3 for more information. /F
https://github.com/python/cpython/blob/3.7/Lib/xmlrpc/client.py#L492
您如何看待,您有什么解决方法?提到的xmlprc3是什么?
我正在使用Python 3.6.7。
谢谢。