Что может вызвать xmlrpclib.ResponseError: ResponseError ()? - PullRequest
3 голосов
/ 15 мая 2010

Я экспериментирую с XML-RPC.

У меня есть следующий серверный скрипт (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'

и следующий клиентский скрипт:

import xmlrpclib

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

Я проверил это локально, и он отлично работает. Все, что он делает, это выплевывает ввод от клиентского скрипта, который является правильным.

Однако, когда я пытаюсь сделать это на удаленном сервере, я получаю следующую ошибку:

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()

Есть идеи, что может вызвать это?

UPDATE:

при 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()

1 Ответ

3 голосов
/ 15 мая 2010

Похоже, что-то еще работает на этом порту на удаленной машине. И отправив обратно неожиданный ответ.

Я бы проверил, правильно ли запускается сервер. Затем проверьте, есть ли в настройках брандмауэра что-то, что может повлиять на ситуацию.

Вы также можете включить подробный флаг в клиенте, чтобы увидеть, проливает ли это какой-либо свет на проблему.

EDIT:

Итак, подробный вывод проясняет проблему: вы не запускаете сервер, вы делитесь им через обычный веб-сервер!

Вам необходимо запустить сервер на удаленной машине.

...