estoy recibiendo el siguiente error en el lado del cliente al pasar caracteres no válidos XML a un SimpleXMLRPCServer Python:Unicode/XML no válido con Python SimpleXMLRPCServer?
Fault: <Fault 1: "<class 'xml.parsers.expat.ExpatError'>:not well-formed (invalid token): line 6, column 15">
¿Por qué? ¿Debo cambiar el código de la biblioteca SimpleXMLRPCServer para solucionarlo?
Aquí está mi código de servidor 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()
Aquí es mi XML-RPC código de cliente:
s = xmlrpclib.ServerProxy('http://localhost:9000')
s.tt(unichr(0x8))
En el lado del servidor, no consigo algún error o de rastreo :
liXXXXXX.members.linode.com - - [06/Dec/2010 23:19:40] "POST /RPC2 HTTP/1.0" 200 -
¿Por qué no hay errores en el lado del servidor? ¿Cómo diagnostico lo que está pasando?
Y me sale el siguiente rastreo del lado del cliente:
/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">
¿Cómo consigo el procesamiento del lado del servidor en su sano juicio si la entrada contiene XML no válido? ¿Puedo limpiar este lado del servidor de datos? ¿Cómo?
Así que sí, gracias por investigar. Como indiqué, entiendo que este no es un XML válido. Me gustaría poder atrapar el error del lado del servidor (en lugar de fallar silenciosamente), y luego quitar cualquier carácter no válido en la entrada. No escribo los clientes, y me gustaría ofrecer los mejores resultados parciales posibles a los clientes si me pasan XML que tiene uno o dos caracteres no válidos. –