繁体   English   中英

python中的xmlrpc客户端调用不会返回

[英]xmlrpc client call in python does not come back

使用Python 2.6.4,Windows

使用以下脚本,我想测试某个xmlrpc服务器。 我调用了一个不存在的函数,并希望返回一个错误。 而是,该函数不返回。 可能是什么原因?

import xmlrpclib
s = xmlrpclib.Server("http://127.0.0.1:80", verbose=True)
s.functioncall()

输出为:

send: 'POST /RPC2 HTTP/1.0\r\nHost: 127.0.0.1:80\r\nUser-Agent: xmlrpclib.py/1.0
.1 (by www.pythonware.com)\r\nContent-Type: text/xml\r\nContent-Length: 106\r\n\
r\n'
send: "<?xml version='1.0'?>\n<methodCall>\n<methodName>functioncall</methodName
>\n<params>\n</params>\n</methodCall>\n"
reply: 'HTTP/1.1 200 OK\r\n'
header: Content-Type: text/xml
header: Cache-Control: no-cache
header: Content-Length: 376
header: Date: Tue, 30 Mar 2010 13:27:21 GMT
body: '<?xml version="1.0"?>\r\n<methodResponse>\r\n<fault>\r\n<value>\r\n<struc
t>\r\n<member>\r\n<name>faultCode</name>\r\n<value><i4>1</i4></value>\r\n</membe
r>\r\n<member>\r\n<name>faultString</name>\r\n<value><string>PVSS00ctrl   (2), 2
010.03.30 15:27:21.395, CTRL, SEVERE,     72, Function not defined, functioncall
, , \n</string></value>\r\n</member>\r\n</struct>\r\n</value>\r\n</fault>\r\n</m
ethodResponse>\r\n'

(这里程序挂起,直到我杀死服务器才返回)

编辑:服务器使用自己的xmlrpc库以C ++编写

编辑:发现一个看起来像相同问题的问题http://bugs.python.org/issue1727418

正如您所注意到的,这是服务器中的错误(客户端声称理解1.0,而服务器却忽略了该错误,无论如何仍以1.1响应,因此不会关闭套接字)。 Python在2.7和3.2中有针对此类错误服务器的解决方法,请参见此问题 ,但该解决方法不在2.6.4中。 不幸的是,从2.6.5的NEWS.txt文件看来,我们也没有将其反向移植到2.6.5。 2.7中解决方法的补丁在这里 ,如果无法修复有问题的服务器,也许您可​​以尝试将其自己应用到2.6.5。

一旦将响应发送回客户端,您正在测试的服务器就很可能不会关闭TCP连接。 因此,客户端挂起,等待服务器关闭连接,然后才能从函数返回。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM