SimpleXMLRPC_XML-RPC简单使用

RPC(Remote Procedure Call)即远程方法调用,是一种在本地的机器上调用远端机器上的一个过程(方法)的技术。这个过程也被大家称为“分布式计算”,是为了提高各个分立机器的“互操作性”而发明出来的技术。

XML-RPC的全称是XML Remote Procedure Call,即XML远程方法调用。

它是一套允许运行在不同操作系统、不同环境的程序实现基于Internet过程调用的规范和一系列的实现。

这种远程过程调用使用http作为传输协议,XML作为传送信息的编码格式。

Xml-Rpc的定义尽可能的保持了简单,但同时能够传送、处理、返回复杂的数据结构。

Python下的XML-RPC:

1、类库:xmlrpclib 一般使用在客户端,这个模块用来调用注册在XML-RPC服务器端的函数,xmlrpclib并不是一个类型安全的模块,无法抵御恶意构造的数据,这方面的一些处理工作需要交给开发者自己。

2、类库:SimpleXMLRPCServer 一般是用在服务器端,这个模块用来构造一个最基本的XML-RPC服务器框架

代码:

xml_rpc_server.py

#coding=utf-8

importosimportSimpleXMLRPCServer#获取当前路径

defpwd():returnos.getcwd()#列出指定目录中的内容

def ls(directory=None):if directory isNone:

directory=pwd()try:returnos.listdir(directory)exceptOSError as e:returne#改变工作路径

defcd(directory):try:

os.chdir(directory)exceptOSError as e:returnereturn 'change current working direcotry to: %s' %(directory)#创建目录

defmkdir(directory):try:

os.mkdir(directory)exceptOSError as e:returneelse:return 'successfully create directory: %s' %directory#文件拷贝

defcp(src, dest):

with open(src,'r') as fin:

with open(dest,'w') as fout:

fout.write(fin.read())return 'copy %s->%s' %(src, dest)classPerson(object):def __init__(self, name, age):

self._name=name

self._age=agedefshow(self):returnstr(self)def __str__(self):return 'Person(name=%s,age=%s' %(self._name, self._age)if __name__ == "__main__":

s= SimpleXMLRPCServer.SimpleXMLRPCServer(('0.0.0.1', 8000))

s.register_function(pwd)#注册函数

s.register_function(ls)

s.register_function(cd)

s.register_function(mkdir)

s.register_function(cp)

p= Person('python', 28)

s.register_instance(p)#注册对象实例

s.serve_forever()

启动xml_rpc服务器:

python xml_rpc_server.py

测试:

>>> importxmlrpclib>>> x = xmlrpclib.ServerProxy('http://192.168.87.200:8000')>>> x.pwd() #获取服务器所在路径

'/home/hupeng/WorkSpace/Python/xml_rpc'

>>>x.ls()

['1.txt', 'xml_rpc_server.py']>>> x.cp('1.txt','2.txt')'copy 1.txt->2.txt'

>>> x.mkdir('tmp')'successfully create directory: tmp'

>>> x.show() #调用对象的show方法

'Person(name=python,age=28)'

注意:

注册的函数要有返回值,否则可能会出现如下错误:

Fault: :cannot marshal None unless allow_none is enabled">

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值