Python xmlrpc客户端错误地发送了换行参数而不是没有参数?

时间:2019-04-18 17:06:29

标签: python-3.x xml-rpc

我在另一个平台上有一个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。

谢谢。

0 个答案:

没有答案