当前位置: 首页 > news >正文

【Python】常用模块:xmlrpc

1、xmlrpc是什么?

xmlrpc 是一套基于 HTTP+XML 格式的轻量级远程过程调用协议;
客户端调用本地函数的写法,实际去调用另一台服务器上的函数;
数据全部用 XML 封装传输,可以实现跨语言通信;

2、客户端和服务端

Python 内置模块包含客户端和服务端:

  • xmlrpc.client 客户端,例如:ServerProxy
  • xmlrpc.server 服务端,例如:SimpleXMLRPCServer

2.1 服务端示例

以 SimpleXMLRPCServer 为例;
运行本地 TCP HTTP 服务:注册普通函数、实例方法,供客户端远程调用

fromxmlrpc.serverimportSimpleXMLRPCServerdefadd(a,b):returna+bif__name__=="__main__":server=SimpleXMLRPCServer(("0.0.0.0",8080),allow_none=True)server.register_function(add,"add")server.serve_forever()

其它内置服务:

  • DocXMLRPCServer:继承 SimpleXMLRPCServer 额外自带自动文档页面;
    浏览器访问端口可以直接查看所有可调用接口、参数说明,调试非常方便
  • MultiPathXMLRPCServer:支持多路径

2.2 客户端示例

以 ServerProxy 为例,连接远程服务器,调用远程服务器中注册的方法

fromxmlrpc.clientimportServerProxy proxy=ServerProxy("http://127.0.0.1:8080",allow_none=True)res=proxy.add(10,20)print("10+20 =",res)

3、自定义传输层

3.1 介绍

客户端 ServerProxy 默认使用Python内置的传输层 Transport;
默认 Transport 功能有限:无法自定义超时、请求头、HTTPS、日志、重试逻辑;
自定义 Transport 可以实现哪些功能:

  • 设置请求超时;
  • 添加自定义 HTTP Header;
  • 请求前后加日志、异常重试;
  • 适配 HTTPS;
  • 走网络代理访问外网 RPC 服务

3.2 示例

自定义传输层 LaoerTransport ,需要先继承 Transport,一般重新实现:make_connection

fromxmlrpc.clientimportTransport,ServerProxyimporthttp.clientclassLaoerTransport(Transport):def__init__(self,timeout=3):super().__init__()self.timeout=timeoutdefmake_connection(self,host):conn=http.client.HTTPConnection(host,timeout=self.timeout)returnconnif__name__=="__main__":trans=LaoerTransport(timeout=2)proxy=ServerProxy("http://127.0.0.1:8080",transport=trans,allow_none=True)print(proxy.add(5,6))

3.3 https传输

如果连接https安全服务器,可以使用Python内置的:SafeTransport

fromxmlrpc.clientimportSafeTransport proxy=ServerProxy("https://xxx:port",transport=SafeTransport())

3.4 Fault 异常处理

服务端内部出错抛出异常时,客户端可以捕获该异常获取错误码和错误信息

try:proxy.test()exceptFaultase:print(e.faultCode,e.faultString)

3.5 Binary 二进制传输

传输二进制数据,比如:图片、视频流、文件等;
需要使用 Binary 包装一层

fromxmlrpc.clientimportBinary data=b"123456"proxy.send_file(Binary(data))
http://www.jsqmd.com/news/1272716/

相关文章:

  • 麒麟系统部署DeepSeek与AnythingLLM本地知识库实践
  • 嵌入式常用滤波算法与控制算法(6)互补滤波
  • 5分钟搭建免费开源的三国杀网页版:零安装的终极游戏体验
  • 怎么把管屏幕三个字拆成9张数据库表
  • C++高性能序列化与数据传输:大数据架构师的底层优化指南
  • Python自动化时间盲注脚本实战:从原理到高效渗透工具开发
  • Kimi LeetCode 3739. 统计主要元素子数组数目 II C语言实现
  • Linux网络排查利器:ss命令原理、实战与netstat替代指南
  • C++二进制文件操作:深入解析std::string序列化原理与避坑指南
  • 光伏发电系统仿真与变步长MPPT算法实践
  • 推动技术成果转化 让创新落地服务实际需求
  • Dify安装与Ollama模型接入
  • 基于Matlab的移动机器人路径规划与PID控制仿真
  • 得物App sign签名逆向:MD5加密常见错误与排查方案详解
  • 国产SPC工具在离散制造中的动态控制与边缘计算应用
  • C 语言循环与自增运算符组合对比分析
  • LangChain Memory机制详解与应用实践
  • LLM结构化输出对回答多样性的影响与平衡策略
  • 羽毛球剪辑算法集锦
  • C++异常处理终极防线:std::terminate触发机制与二次异常规避
  • 大模型技术全解析:从理论到工程实践
  • 使用JPEXS FFDec逆向分析SWF文件中的自定义加密算法与密钥生成
  • AI大模型应用开发工程师:技术落地与商业价值
  • 微信防撤回补丁失效?逆向工程实战:从内存修改到开源方案
  • Python历史事件爬虫系统:架构设计与实战技巧
  • 平衡二叉树、相交链表与随机指针链表的LeetCode经典题解析
  • AI治理中的技术尊严:易经三原则与动态伦理评估
  • 千笔AI如何解决MBA论文写作五大痛点
  • 上海做宴会厅隔断的厂家哪个好 2026年正规厂家实力与用户口碑 - 工业品牌热点
  • AIGC检测与抄袭检测的技术差异与应用实践