热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python远程调用rpc模块xmlrpclib的方法

今天小编就为大家分享一篇python远程调用rpc模块xmlrpclib的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

RPC(Remote Procedure Call Protocol)是远程调用协议,它通过网络请求服务到远端服务器,服务器根据请求做出响应,将结果返回

它是一种C/S模式,客户端可以调用远程服务器上的参数(类似URL)并返回结果

利用rpc可以实现系统的分布式架构,可以将功能分解到多台服务器上进行实现,同时也将也可以将负载打散,分布到不同服务器上,整合计算资源

在openstack中就大量使用了rpc

rpc多使用http传输请求,格式有xml,json等,这里是xml

模块:

xmlrpclib

注:xmlrpclib模块在python3中重命名为xmlrpc.client

xmlrpc并不是很安全,但在2.7.9 https url中默认加入了证书,主机名验证

定义:

class xmlrpclib.ServerProxy(uri[, transport[, encoding[, verbose[, allow_none[, use_datetime[, context]]]]]])

1.uri,即服务端的url地址

2.transport 传输实例,可选,https urls/http

3.encoding

4.verbose 是debug模式

5.allow_none 是否请求空 ,若为True,那么常量none将被翻译成xml,默认如果是none则抛出异常 TypeError

6.use_datetime 可以使用date/time values记录调用时间datetime.datetime,默认是false

ServerProxy对象提供一些默认的方法:

1.ServerProxy.system.listMethods() 返回远端服务器方法列表

2.ServerProxy.system.methodSignature(name) 方法签名,是一个数组类型

3.ServerProxy.system.methodHelp(name) 方法帮助信息

例如一个简单的示例:

服务端:

import xmlrpclib
from SimpleXMLRPCServer import SimpleXMLRPCServer

def get_power(n,m):
 return n**m

server = SimpleXMLRPCServer(("0.0.0.0", 8081))
print "start service get power on 0.0.0.0 8081..."
server.register_function(get_power, "get_power")
server.serve_forever()

客服端:

import xmlrpclib

server_power = xmlrpclib.ServerProxy("http://192.168.137.9:8081/")
print "3**2 = %d" %(server_power.get_power(3,2))
print "2**5 = %d" %(server_power.get_power(2,5))

结果:

服务端:

# python xml_server.py 
start service get power on 0.0.0.0 8081...

192.168.137.9 - - [22/May/2017 10:37:47] "POST / HTTP/1.1" 200 -
192.168.137.9 - - [22/May/2017 10:37:47] "POST / HTTP/1.1" 200 -

客服端:

# python xml_client.py 
3**2 = 9
2**5 = 32

xmlrpclib提供的一些方法:

class xmlrpclib.DateTime 时间对象

例如:

服务端:

import datetime
from SimpleXMLRPCServer import SimpleXMLRPCServer
import xmlrpclib

def today():
 today = datetime.datetime.today()
 return xmlrpclib.DateTime(today)

server = SimpleXMLRPCServer(("0.0.0.0", 8081))
print "start service on 0.0.0.0 8081..."
server.register_function(today, "today")
server.serve_forever()

客服端:

import xmlrpclib
import datetime

s = xmlrpclib.ServerProxy("http://192.168.137.9:8081/")

today = s.today()
cOnverted= datetime.datetime.strptime(today.value, "%Y%m%dT%H:%M:%S")
print "Today: %s" % converted.strftime("%d.%m.%Y, %H:%M")

结果:

服务端

# python rpc_time.py 
start service on 0.0.0.0 8081...

192.168.137.9 - - [22/May/2017 10:43:19] "POST / HTTP/1.1" 200 -

客服端:

# python rpc_time_client.py 
Today: 22.05.2017, 10:43

2.class xmlrpclib.Binary 二进制对象

3.class xmlrpclib.Fault fault对象

如:

客服端:

import xmlrpclib

s = xmlrpclib.ServerProxy("http://192.168.137.9:8081/")
try:
 s.add(2, 5)
except xmlrpclib.Fault as err:
 print "A fault occurred"
 print "Fault code: %d" % err.faultCode
 print "Fault string: %s" % err.faultString

class xmlrpclib.MultiCall(server) 提供多个调用,复合调用:

例如:

from SimpleXMLRPCServer import SimpleXMLRPCServer

def add(x,y):
 return x+y

def subtract(x, y):
 return x-y

def multiply(x, y):
 return x*y

def divide(x, y):
 return x/y

def get_power(n,m):
 return n**m

server = SimpleXMLRPCServer(("0.0.0.0", 8081))
print "start service on 0.0.0.0 8081..."

server.register_multicall_functions()
server.register_function(add, 'add')
server.register_function(subtract, 'subtract')
server.register_function(multiply, 'multiply')
server.register_function(divide, 'divide')
server.register_function(get_power, 'get_power')
server.serve_forever() 

客服端:

import xmlrpclib

s = xmlrpclib.ServerProxy("http://192.168.137.9:8081/")
multicall = xmlrpclib.MultiCall(s)
multicall.add(7,3)
multicall.subtract(7,3)
multicall.multiply(7,3)
multicall.divide(7,3)
multicall.get_power(7,3)
result = multicall()

print "7+3=%d, 7-3=%d, 7*3=%d, 7/3=%d 7**3=%d" % tuple(result)

服务端:

# python mul_xmlserver.py 
start service on 0.0.0.0 8081...

192.168.137.9 - - [22/May/2017 10:51:59] "POST / HTTP/1.1" 200 -

客服端:

# python mul_xmlclient.py 
7+3=10, 7-3=4, 7*3=21, 7/3=2 7**3=343

另外xmlrpc还提供有比较快捷的函数:

1.xmlrpclib.boolean(value) 将任意的python值转换成xmlrpc的布尔类型True/False

2.xmlrpclib.dumps(params[, methodname[, methodresponse[, encoding[, allow_none]]]])

params请求转换为xml

3.xmlrpclib.loads(data[, use_datetime])

将一个xml-rpc的请求转换成python对象

例如:

from xmlrpclib import ServerProxy, Error

server = ServerProxy("http://betty.userland.com")

print server

try:
 print server.examples.getStateName(41)
except Error as err:
 print "ERROR", err

客服端:

import xmlrpclib, httplib

class ProxiedTransport(xmlrpclib.Transport):
 def set_proxy(self, s):
  self.s = s

 def make_connection(self, host):
  self.realhost = host
  h = httplib.HTTPConnection(self.s)
  return h

 def send_request(self, connection, handler, request_body):
  connection.putrequest("POST", 'http://%s%s' % (self.realhost, handler))

 def send_host(self, connection, host):
  connection.putheader('Host', self.realhost)

p = ProxiedTransport()
p.set_proxy('proxy-server:8080')
server = xmlrpclib.ServerProxy('http://time.xmlrpc.com/RPC2', transport=p)
print server.currentTime.getCurrentTime()

以上这篇python远程调用rpc模块xmlrpclib的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


推荐阅读
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • ejava,刘聪dejava
    本文目录一览:1、什么是Java?2、java ... [详细]
author-avatar
bakurei_492
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有