当我向Python SimpleXMLRPCServer传递无效的XML字符时,客户端会出现以下错误:
Fault: <Fault 1: "<class 'xml.parsers.expat.ExpatError'>:not well-formed (invalid token): line 6, column 15">
为什么?我必须更改SimpleXMLRPCServer库代码来解决这个问题吗?
以下是我的XML-RPC服务器代码:
from SimpleXMLRPCServer import SimpleXMLRPCServer
import logging
logging.basicConfig(level=logging.DEBUG)
def tt(text):
return "cool"
server = SimpleXMLRPCServer(("0.0.0.0", 9000))
server.register_introspection_functions()
server.register_function(tt)
# Run the server's main loop
server.serve_forever()
这是我的XML-RPC客户端代码:
s = xmlrpclib.ServerProxy('http://localhost:9000')
s.tt(unichr(0x8))
在服务器端,我没有收到任何错误或回溯信息:
liXXXXXX.members.linode.com - - [06/Dec/2010 23:19:40] "POST /RPC2 HTTP/1.0" 200 -
为什么服务器端没有错误?我该如何诊断问题?
客户端显示以下回溯信息:
/usr/lib/python2.6/xmlrpclib.pyc in __call__(self, *args)
1197 return _Method(self.__send, "%s.%s" % (self.__name, name))
1198 def __call__(self, *args):
-> 1199 return self.__send(self.__name, args)
1200
1201 ##
/usr/lib/python2.6/xmlrpclib.pyc in __request(self, methodname, params)
1487 self.__handler,
1488 request,
-> 1489 verbose=self.__verbose
1490 )
1491
/usr/lib/python2.6/xmlrpclib.pyc in request(self, host, handler, request_body, verbose)
1251 sock = None
1252
-> 1253 return self._parse_response(h.getfile(), sock)
1254
1255 ##
/usr/lib/python2.6/xmlrpclib.pyc in _parse_response(self, file, sock)
1390 p.close()
1391
-> 1392 return u.close()
1393
1394 ##
/usr/lib/python2.6/xmlrpclib.pyc in close(self)
836 raise ResponseError()
837 if self._type == "fault":
--> 838 raise Fault(**self._stack[0])
839 return tuple(self._stack)
840
Fault: <Fault 1: "<class 'xml.parsers.expat.ExpatError'>:not well-formed (invalid token): line 6, column 15">
如果输入包含无效的XML,我该如何获得合理的服务器端处理?我能在服务器端清理这些数据吗?如何操作?