使用xmlrpc和python设置XML值
我需要设置一个在远程Linux服务器上的XML文件中的某个字段的值。我该怎么知道我应该连接哪个端口呢?
import xmlrpclib
server = xmlrpclib.ServerProxy('http://10.77.21.240:9000')
print server.ping()
print "I'm in hurray"
但是我连ping都没法成功:
Traceback (most recent call last):
File "ping.py", line 3, in <module>
print server.ping()
File "C:\Python26\lib\xmlrpclib.py", line 1199, in __call__
return self.__send(self.__name, args)
File "C:\Python26\lib\xmlrpclib.py", line 1489, in __request
verbose=self.__verbose
File "C:\Python26\lib\xmlrpclib.py", line 1235, in request
self.send_content(h, request_body)
File "C:\Python26\lib\xmlrpclib.py", line 1349, in send_content
connection.endheaders()
File "C:\Python26\lib\httplib.py", line 892, in endheaders
self._send_output()
File "C:\Python26\lib\httplib.py", line 764, in _send_output
self.send(msg)
File "C:\Python26\lib\httplib.py", line 723, in send
self.connect()
File "C:\Python26\lib\httplib.py", line 704, in connect
self.timeout)
File "C:\Python26\lib\socket.py", line 514, in create_connection
raise error, msg
socket.error: [Errno 10061] No connection could be made because the target machine actively refused it.
我哪里做错了?
1 个回答
这里有几个可以尝试或考虑的事情:
在远程主机上打开命令提示符,输入"
netstat -nap | grep 9000
"。如果没有看到什么有趣的结果,那就说明9000端口上没有任何东西在运行。你提到的远程主机地址是10.77.21.240。这是一个在网络上无法路由的地址(也就是所谓的私有网络),那么这个服务器本身(不仅仅是你的应用)能否被ping通呢?如果你使用的是Windows系统,可以去开始菜单 -> 运行,输入"cmd"。然后在提示符下输入"ping 10.77.21.240",看看结果如何。
还有一个想法:进程可能在9000端口上正常运行,但它可能是以127.0.0.1:9000的形式打开的,而不是0.0.0.0:9000。第一个地址只能被同一台机器上的进程访问,而第二个地址则会在机器的所有可用IP地址上打开端口。
根据评论的更新:即使它不应该是个问题,也不能排除它确实是个问题。当你在调试一些应该正常工作的东西,但它却不工作时,你需要非常仔细地检查每一步,不给自己留任何“哦,我知道那不可能是问题”的余地——这就像是口头上的“随便说说”(通常伴随着一个真实的手势)。你会惊讶地发现,问题往往就出现在你随便说说的地方!做一次ping测试只需要3秒钟。如果成功了,你就继续,如果不成功……
处理任何系统问题的前三个步骤是:
- 它插上电源了吗?
- 它开机了吗?
- 它配置正确吗?
你需要对从键盘到应用程序的每一个硬件/软件都进行这些检查。我猜大约80%的“突然”故障都是第1或第2项——没错,真的。电缆常常让人头疼。
当我和新手通话时,我通常会先尝试大范围测试——如果他们能在浏览器中打开news.google.com,然后点击一个随机的新闻,我就知道网络大致是正常的。为什么要测试新闻和随机故事呢?为了避免浏览器缓存的问题。我已经记不清有多少次我姐姐打电话告诉我“互联网坏了!”我们首先做的就是谷歌新闻测试。99%的情况下,这个测试是成功的,所以我让她启动反向WinVNC(UltraVNC的SingleClick真是太方便了),我远程进入她的电脑,然后我们就能看到真正的问题是什么。
如果大范围测试不成功,我就看看他们能否访问他们的路由器。等等等等。