Python中的xmlrpc客户端调用没有返回
使用的是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'
(在这里程序卡住了,直到我强制关闭服务器才会返回)
补充说明:这个服务器是用C++写的,使用了它自己的xmlrpc库。
补充说明:我发现了一个问题,看起来和我遇到的情况很相似 http://bugs.python.org/issue1727418
2 个回答
2
很可能,你正在测试的服务器在发送完回复给你的客户端后,并没有关闭TCP连接。因此,客户端就会一直卡在那里,等着服务器关闭连接,才能从这个函数中返回。