新闻中心

怎么用Python的xmlrpc实现客户端和服务器

2025-12-15
浏览次数:
返回列表
Python的xmlrpc模块提供基于HTTP+XML的轻量跨语言RPC,服务器用SimpleXMLRPCServer注册实例并serve_forever,客户端用ServerProxy调用;支持int/float/str/bool/datetime/bytes/list/dict(key须为str),不支持set/tuple/自定义类,大文件传输不适用。

怎么用python的xmlrpc实现客户端和服务器

Python 的 xmlrpc 模块(标准库中的 xmlrpc.serverxmlrpc.client)提供了一种轻量、跨语言的远程过程调用方式,适合简单服务场景。它基于 HTTP + XML,无需额外依赖,开箱即用。

服务器端:用 SimpleXMLRPCServer(Python 3.12+ 已改名)

在 Python 3.12 之前,常用 SimpleXMLRPCServer;3.12 起已移入 xmlrpc.server,类名改为 SimpleXMLRPCServer(路径不变,只是模块位置调整)。以下写法兼容 3.9–3.12:

  • 定义一个普通函数(如 add(a, b)),它将作为可被远程调用的方法
  • 创建服务器实例,绑定到本地地址和端口(如 localhost:8000
  • register_function() 注册函数,或用 register_instance() 注册整个对象(推荐后者,便于组织多个方法)
  • 调用 serve_forever() 启动阻塞式服务

示例(server.py):

from xmlrpc.server import SimpleXMLRPCServer
import time
<p>class Calculator:
def add(self, a, b):
return a + b
def now(self):
return time.ctime()</p><p>server = SimpleXMLRPCServer(("localhost", 8000))
server.register_instance(Calculator())
print("XML-RPC server running on <a href="https://www.php.cn/link/d62bd5e1be9a157e45aed37bd98743c2">https://www.php.cn/link/d62bd5e1be9a157e45aed37bd98743c2</a>")
server.serve_forever()

客户端:用 ServerProxy 调用远程方法

客户端只需用 xmlrpc.client.ServerProxy 连接服务器 URL,之后像调用本地对象一样使用点号语法访问方法。

  • URL 格式为 http://host:port/(末尾斜杠不能少)
  • 调用会自动序列化参数、发送 HTTP POST 请求、解析 XML 响应
  • 若服务器不可达、方法不存在或参数类型不匹配,会抛出 FaultProtocolErrorConnectionError

示例(client.py):

极限网络办公Office Automation 极限网络办公Office Automation

专为中小型企业定制的网络办公软件,富有竞争力的十大特性: 1、独创 web服务器、数据库和应用程序全部自动傻瓜安装,建立企业信息中枢 只需3分钟。 2、客户机无需安装专用软件,使用浏览器即可实现全球办公。 3、集成Internet邮件管理组件,提供web方式的远程邮件服务。 4、集成语音会议组件,节省长途话费开支。 5、集成手机短信组件,重要信息可直接发送到员工手机。 6、集成网络硬

极限网络办公Office Automation 0 查看详情 极限网络办公Office Automation
import xmlrpc.client
<p>proxy = xmlrpc.client.ServerProxy("<a href="https://www.php.cn/link/d62bd5e1be9a157e45aed37bd98743c2">https://www.php.cn/link/d62bd5e1be9a157e45aed37bd98743c2</a>")</p><p>print(proxy.add(3, 5))      # 输出: 8
print(proxy.now())          # 输出: Wed Apr 10 15:22:33 2025

支持的数据类型与注意事项

XML-RPC 只支持有限的原生类型:int、float、string、boolean、datetime、bytes(Python 3 中对应 bytes)、list、dict(键必须是 string)。不支持 set、tuple(会被转成 list)、自定义类、None(但可传 None,服务器端收到的是 None,客户端也能接收)。

  • 字典的 key 必须是字符串,否则序列化失败
  • datetime 对象会被自动转成 DateTime 类型,在客户端收到的是 xmlrpc.client.DateTime 实例,可用 .value 获取 ISO 字符串,或转成 datetimedatetime.strptime(dt.value, "%Y%m%dT%H:%M:%S")
  • 大文件传输不适合 XML-RPC(XML 开销大、无流式支持),建议改用 HTTP 文件上传或 gRPC

加个简单认证(可选)

XML-RPC 协议本身不带认证,但可通过 HTTP Basic Auth 包装:

  • 服务器端需配合 WSGI 或用 http.server 自定义 handler 实现 auth(标准 SimpleXMLRPCServer 不支持)
  • 更简单的方式:客户端在 URL 中嵌入凭证,如 "http://user:pass@localhost:8000/"(仅限测试,不安全)
  • 生产环境建议加反向代理(如 Nginx)做 Basic Auth 或 JWT 验证

基本上就这些。不复杂但容易忽略细节——比如 URL 斜杠、字典 key 类型、datetime 处理。跑通 hello world 后,扩展业务逻辑只需往注册对象里加方法即可。

以上就是怎么用Python的xmlrpc实现客户端和服务器的详细内容,更多请关注其它相关文章!


# 转换为  # 15个seo技巧  # 谷歌白帽seo  # 河北典当网站建设  # 网站优化排名方案  # 青海网站建设模块化  # seo要收费吗  # 重庆seo推广开发  # 无蜘蛛不seo  # 海外推广网站方法有哪些  # 地产营销推广进阶方案  # 如何用  # 里加  # python  # 只需  # 遍历  # 转成  # 的是  # 不支持  # 自定义  # 客户端  # asic  # 标准库  # proxy  # 端口  # nginx 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 如何将HTML表格多行数据保存到Google Sheet  UC浏览器网页版登录入口官网 电脑版网址入口  sublime怎么进行远程开发编辑_配置rsub/rmate实现sublime编辑服务器文件  极速漫画官方主页网址 极速漫画漫画在线浏览官网链接  Word2013如何插入视频和音频媒体_Word2013媒体插入的多媒体支持  QQ邮箱稳定登录入口_QQ邮箱官方网站网页版使用  Python中高效且防溢出的双曲正弦计算:基于对数空间的优化策略  AO3网页版最新入口合集 Archive of Our Own在线访问指南  Node.js CSV 数据处理:基于字段值条件过滤整条记录的策略  神经网络二分类模型训练异常:高损失与完美验证准确率的排查与修正  蛙漫2日版入口 WAMAN2(日版)无删减漫画官网链接  Windows7怎么硬盘安装 Windows7提取ISO镜像到非系统盘并运行setup.exe实现硬盘直装【教程】  Archive of Our Own官网直达 AO3最新可用地址一览  J*aScript Promise链中如何正确终止后续.then执行并处理错误  写好的html代码怎么运行出来_运行写好的html代码方法【教程】  将HTML Canvas内容转换为可上传的图像文件(File对象)  poki网页游戏推荐_poki免费游戏平台入口  C#中解析不规范的HTML为XML 常见的坑与解决办法  解决Python单元测试中Mock异常方法调用计数为零的问题  特斯拉自动驾驶房车计划曝光 原型车将于2027年亮相  夸克浏览器图书入口 夸克手机浏览器阅读入口  AO3最新镜像入口 Archive of Our Own官方平台访问  126邮箱网页版官方入口 126邮箱账号在线登录平台  基于动态规划的房屋花卉种植最小成本算法详解  印象笔记如何设离线包出差查阅_印象笔记设离线包出差查阅【离线阅读】  qq邮箱日历功能怎么用_创建日程与会议邀请的技巧  知音漫客正版漫画平台_知音漫客官网账号登录  mysql如何设置表访问权限_mysql表访问权限配置  sublime如何优雅地处理行尾空格_sublime自动清理多余空白字符配置  win11 arm版怎么安装 M1/M2 Mac虚拟机安装ARM win11的方法  在J*a中如何在J*a中使用异常机制记录错误日志_异常日志实践经验  windows10怎么关闭系统提示音_windows10彻底静音设置方法  12306怎么选座位选到安静区_12306选座安静区域选择策略  steam官方网页快速访问 steam账号注册全流程  ArrayList与LinkedList操作复杂度详解:遍历与修改  C++ typeid如何获取类型信息_C++ RTTI运行时类型识别用法  马斯克:Optimus 人形机器人复数形式为 Optimi  如何使用CaptainHook和Composer管理Git钩子_在提交前自动运行代码检查的Composer配置  深入理解rpy2中的类型转换:优化Python对象到R矩阵的映射  PDF文件体积过大处理_PDF压缩技巧详解  三星GalaxyZFold5怎样在相册制作折叠屏分镜_iPhone三星GalaxyZFold5相册制作折叠屏分镜【创意编辑】  Composer如何解决json扩展缺失的错误  漫蛙漫画官方主页入口 漫蛙MANWA网页直达访问链接  Mudbox图层蒙版怎么用_Mudbox图层蒙版数字雕刻应用技巧  如何仅使用CSS更改登录界面背景图像图标的颜色  如何设置Windows Defender的定时扫描_计划任务实现自动杀毒【安全】  HTML空白字符处理机制:渲染、DOM与编码实践  在Blazor WebAssembly应用中动态注入客户端特定指标代码的策略  在VS Code中配置和运行Dart程序的完整步骤  黑猫投诉统一入口官网 消费者权益保护投诉平台 

搜索