【问题标题】:xmlrpc client call in python does not come backpython中的xmlrpc客户端调用不回来
【发布时间】:2010-03-30 13:44:50
【问题描述】:

使用 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类似的问题

【问题讨论】:

    标签: python client xml-rpc


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2011-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多