2010-05-14 6 views
3

J'expérimente avec XML-RPC.Qu'est-ce qui pourrait causer xmlrpclib.ResponseError: ResponseError()?

J'ai le script serveur suivant (Python):

from SimpleXMLRPCServer import SimpleXMLRPCServer 

server = SimpleXMLRPCServer(('localhost', 9000)) 

def return_input(someinput): 
return someinput 

server.register_function(return_input) 

try: 
    print 'ctrl-c to stop server' 
    server.serve_forever() 
except KeyboardInterrupt: 
    print 'stopping' 

et le script client suivant:

import xmlrpclib 

server = xmlrpclib.ServerProxy('http://www.example.com/pathto/xmlrpcTester2.py') 
print server.return_input('some input') 

J'ai testé localement et il fonctionne très bien. Tout ce qu'il fait crache l'entrée du script client, ce qui est juste.

Cependant, lorsque je tente de le faire sur un serveur distant, je reçois l'erreur suivante:

Traceback (most recent call last): 
    File "client.py", line 4, in <module> 
    print server.return_input('some input') 
    File  "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/xmlrpclib.py", line  1199, in __call__ 
    return self.__send(self.__name, args) 
    File  "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/xmlrpclib.py", line  1489, in __request 
    verbose=self.__verbose 
    File  "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/xmlrpclib.py", line  1253, in request 
return self._parse_response(h.getfile(), sock) 
File  "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/xmlrpclib.py", line  1392, in _parse_response 
return u.close() 
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/xmlrpclib.py", line 836, in close 
raise ResponseError() 
xmlrpclib.ResponseError: ResponseError() 

Toutes les idées ce qui pourrait être la cause?

MISE À JOUR:

quand verbose=True:

send: 'POST /pythonScripts/xmlrpcTester2.py HTTP/1.0\r\nHost:   www.example.com\r\nUser-Agent: xmlrpclib.py/1.0.1 (by www.pythonware.com)\r\nContent- Type: text/xml\r\nContent-Length: 166\r\n\r\n' 
send: "<?xml version='1.0'? >\n<methodCall>\n<methodName>return_input</methodName>\n<params>\n<param>\n<value><string>so me input</string></value>\n</param>\n</params>\n</methodCall>\n" 
reply: 'HTTP/1.1 200 OK\r\n' 
header: Date: Fri, 14 May 2010 20:52:25 GMT 
header: Server: Apache/2.2.9 (Fedora) 
header: Last-Modified: Fri, 14 May 2010 20:52:03 GMT 
header: ETag: "7e206-13d-486940c17a2c0" 
header: Accept-Ranges: bytes 
header: Content-Length: 317 
header: Connection: close 
header: Content-Type: text/plain; charset=UTF-8 
body: "from SimpleXMLRPCServer import SimpleXMLRPCServer\r\n\r\nserver = SimpleXMLRPCServer(('localhost', 8000))\r\n\r\ndef return_input(someinput):\r\n\treturn  someinput\r\n\r\nserver.register_function(return_input)\r\n\r\ntry:\r\n  print 'ctrl-c to  stop server'\r\n  server.serve_forever()\r\nexcept KeyboardInterrupt:\r\n  print  'stopping'" 
Traceback (most recent call last): 
    File "client.py", line 4, in <module> 
    print server.return_input('some input') 
    File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/xmlrpclib.py", line 1199, in __call__ 
    return self.__send(self.__name, args) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/xmlrpclib.py", line 1489, in __request 
    verbose=self.__verbose 
    File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/xmlrpclib.py", line 1253, in request 
    return self._parse_response(h.getfile(), sock) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/xmlrpclib.py", line 1392, in _parse_response 
    return u.close() 
    File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/xmlrpclib.py", line 836, in close 
    raise ResponseError() 
xmlrpclib.ResponseError: ResponseError() 

Répondre

2

On dirait que quelque chose est en cours d'exécution d'autre sur ce port sur la machine distante. Et renvoyer une réponse inattendue.

Je vérifierais le serveur démarre correctement. Vérifiez ensuite s'il y a quelque chose dans la configuration du pare-feu qui pourrait affecter les choses.

Vous pouvez également activer le drapeau bavard dans le client pour voir si cela jette une lumière sur le problème.

EDIT:

Ainsi, la sortie verbeuse indique clairement le problème: vous n'êtes pas en cours d'exécution du serveur, vous le partager sur une normale webserver!

Vous devez exécuter le serveur sur la machine distante.

+0

Merci Douglas; Je regarde dans vos suggestions. Si cela aide, j'ai mis à jour le post avec ce que je reçois quand verbose = True – Tom

Questions connexes