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
import os
import SimpleXMLRPCServer # 获取当前路径
def pwd():
return os.getcwd() # 列出指定目录中的内容
def ls(directory=None):
if directory is None:
directory = pwd()
try:
return os.listdir(directory)
except OSError as e:
return e # 改变工作路径
def cd(directory):
try:
os.chdir(directory)
except OSError as e:
return e
return 'change current working direcotry to: %s' % (directory) # 创建目录
def mkdir(directory):
try:
os.mkdir(directory)
except OSError as e:
return e
else:
return 'successfully create directory: %s' % directory # 文件拷贝
def cp(src, dest):
with open(src, 'r') as fin:
with open(dest, 'w') as fout:
fout.write(fin.read())
return 'copy %s->%s' % (src, dest) class Person(object):
def __init__(self, name, age):
self._name = name
self._age = age def show(self):
return str(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
测试:
>>> import xmlrpclib
>>> 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: <Fault 1: "<type 'exceptions.TypeError'>:cannot marshal None unless allow_none is enabled">
XML-RPC简单使用的更多相关文章
- C# 构建XML(简单示例)
C# 构建XML的简单示例: var pars = new Dictionary<string, string> { {"url","https://www. ...
- Linq对XML的简单操作
前两章介绍了关于Linq创建.解析SOAP格式的XML,在实际运用中,可能会对xml进行一些其它的操作,比如基础的增删该查,而操作对象首先需要获取对象,针对于DOM操作来说,Linq确实方便了不少,如 ...
- ACEXML解析XML文件——简单示例程序
掌握了ACMXML库解析XML文件的方法后,下面来实现一个比较完整的程序. 定义基本结构 xml文件格式如下 <?xml version="1.0"?> <roo ...
- 【转】RPC简单介绍
RPC简单介绍 RPC 1. RPC是什么 RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络 ...
- FOR XML PATH 简单介绍
FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作.那么以一个实例为主 ...
- XML系列之--对电文格式XML的简单操作(三)
前两章介绍了关于Linq创建.解析SOAP格式的XML,在实际运用中,可能会对xml进行一些其它的操作,比如基础的增删该查,而操作对象首先需要获取对象,针对于DOM操作来说,Linq确实方便了不少,如 ...
- 什么是XML RPC?
# -*- coding: cp936 -*- #python 27 #xiaodeng #什么是XML RPC? #中文叫:远程过程调用 #使用http协议做传输协议的rpc机制,使用xml文本的方 ...
- The type javax.xml.rpc.ServiceException cannot be resolved.It is indirectly
The type javax.xml.rpc.ServiceException cannot be resolved.It is indirectly 博客分类: 解决方案_Java 问题描述:T ...
- 利用beans.xml进行简单的Spring应用上下文创建与使用
继上次配置Spring完成后,我们来创建一个简单的例程来理解Spring中利用beans.xml创建应用上下文的方法. 程序路径包为:com.spring.kinghts(kinght单词拼写错误,怕 ...
- solr4.2 solrconfig.xml配置文件简单介绍
对于solr4.x的每个core有两个很重要的配置文件:solrconfig.xml和schema.xml,下面我们来了解solrconfig.xml配置文件. 具体很详细的内容请细读solrcofi ...
随机推荐
- Oracle 11g新特性 Interval Partition
分区(Partition)一直是Oracle数据库引以为傲的一项技术,正是分区的存在让Oracle高效的处理海量数据成为可能,在Oracle 11g中,分区技术在易用性和可扩展性上再次得到了增强.在1 ...
- python关于时间的计算,time模块
import time, datetime # time.time 返回当前时间的时间戳(1970纪元后经过的浮点秒数)(格林尼治时间). # 1分钟60秒,1小时3600秒,1天86400秒. pr ...
- Double H5.0
Alpha阶段 - 博客链接合集 项目Github地址 Github 敏捷冲刺日志 Alpha冲刺! Day1 - 磨刀 Alpha冲刺! Day2 - 砍柴 Alpha冲刺! Day3 - 砍柴 A ...
- C++ bitset
itset存储二进制数位. bitset就像一个bool类型的数组一样,但是有空间优化——bitset中的一个元素一般只占1 bit,相当于一个char元素所占空间的八分之一. bitset中的每个元 ...
- HTTPS工作原理和TCP握手机制
1.HTTPS的工作原理 HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手, 在握手过程中将确立双方加密传输数据的密码信息. TLS/SSL协议不仅仅是一套加密传输的协议, ...
- SWIFT Function
Swift中的函数跟JAVA语言的函数差不多,但也有差别,SWIFT中定义函数可以指定参数的名称这也是别的语言没有的,好处就是增加了可读性.其返回值是放在未尾的,如以下定义一个加法器: func ad ...
- HAWQ + MADlib 玩转数据挖掘之(七)——关联规则方法之Apriori算法
一.关联规则简介 关联规则挖掘的目标是发现数据项集之间的关联关系,是数据挖据中一个重要的课题.关联规则最初是针对购物篮分析(Market Basket Analysis)问题提出的.假设超市经理想更多 ...
- 解决tensorflow的"Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA Using TensorFlow backend."警告问题
问题描述 程序开始运行的时候报出警告:I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructio ...
- Ubuntu16.04怎样安装Python3.6
Ubuntu16.04默认安装了Python2.7和3.5 请注意,系统自带的python千万不能卸载! 输入命令python
- windows运行打开服务命令
1. gpedit.msc-----组策略 2. sndrec32-------录音机 3. Nslookup-------IP地址侦测器 4. explorer-------打开资源管 ...