Python的xmlrpc库怎么用 XML-RPC客户端和服务端

来源:草根站长作者:坚哥头衔:草根站长
导读:本期聚焦于小伙伴创作的《Python的xmlrpc库怎么用 XML-RPC客户端和服务端》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Python的xmlrpc库怎么用 XML-RPC客户端和服务端》有用,将其分享出去将是对创作者最好的鼓励。

XML-RPC是一种使用XML格式编码调用信息、通过HTTP协议传输的远程过程调用协议,Python标准库内置的xmlrpc模块提供了完整的实现,无需额外安装第三方库就可以快速开发XML-RPC的服务端和客户端程序。

Python的xmlrpc库怎么用 XML-RPC客户端和服务端

XML-RPC服务端开发

服务端的核心是使用xmlrpc.server.SimpleXMLRPCServer创建服务实例,然后注册可以被客户端调用的方法,最后启动服务监听请求。

基础服务端示例

下面是一个简单的服务端实现,提供了加法和获取系统时间两个可调用方法:

from xmlrpc.server import SimpleXMLRPCServer
import datetime

# 创建服务端实例,绑定本地8000端口
server = SimpleXMLRPCServer(("127.0.0.1", 8000))

# 定义供客户端调用的方法
def add(a, b):
    return a + b

def get_current_time():
    return datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")

# 注册方法到服务端
server.register_function(add, "add")
server.register_function(get_current_time, "get_current_time")

# 还可以注册系统内置方法,比如查看已注册的方法列表
server.register_introspection_functions()

print("XML-RPC服务端已启动,监听127.0.0.1:8000")
# 启动服务,持续监听请求
server.serve_forever()

服务端注意事项

  • 注册方法时如果不指定第二个参数,默认使用方法本身的名称作为客户端调用的名称
  • 服务端方法支持的参数类型包括整数、浮点数、字符串、列表、字典等基础Python数据类型,复杂对象需要先序列化
  • 如果需要处理并发请求,可以使用SimpleXMLRPCServer的多线程版本SimpleXMLRPCServer配合ThreadingMixIn

XML-RPC客户端开发

客户端使用xmlrpc.client.ServerProxy创建代理对象,通过这个对象就可以像调用本地方法一样调用服务端注册的方法。

基础客户端示例

对应上面服务端的客户端实现如下:

import xmlrpc.client

# 创建服务端代理,地址对应服务端的监听地址
proxy = xmlrpc.client.ServerProxy("http://127.0.0.1:8000")

# 调用服务端的add方法
result1 = proxy.add(3, 5)
print(f"3加5的结果是:{result1}")

# 调用服务端的get_current_time方法
result2 = proxy.get_current_time()
print(f"当前服务端时间是:{result2}")

# 调用系统内置方法,查看服务端所有可调用方法
methods = proxy.system.listMethods()
print(f"服务端已注册的方法:{methods}")

客户端异常处理

调用过程中可能出现网络错误、方法不存在、参数类型不匹配等问题,需要添加异常处理逻辑:

import xmlrpc.client

proxy = xmlrpc.client.ServerProxy("http://127.0.0.1:8000")

try:
    # 尝试调用不存在的方法
    result = proxy.not_exist_method()
except xmlrpc.client.Fault as e:
    print(f"服务端返回错误:错误码{e.faultCode},错误信息{e.faultString}")
except ConnectionError:
    print("无法连接到服务端,请检查服务端是否启动")
except Exception as e:
    print(f"其他异常:{e}")

参数传递与复杂类型处理

XML-RPC支持的基础类型可以直接传递,对于自定义类的实例,需要先转换为字典等可序列化类型再传递:

# 服务端方法,接收字典类型参数
def update_user_info(user_dict):
    print(f"收到用户信息:{user_dict}")
    return f"用户{user_dict.get('name')}信息更新成功"

# 客户端传递字典参数
proxy = xmlrpc.client.ServerProxy("http://127.0.0.1:8000")
user = {
    "id": 1,
    "name": "张三",
    "age": 25
}
response = proxy.update_user_info(user)
print(response)

常见问题说明

  • XML-RPC默认使用HTTP协议,不支持加密传输,如果需要安全传输可以配合HTTPS使用
  • 服务端和客户端如果跨语言开发,需要注意不同语言的数据类型映射关系,避免类型不兼容
  • 大文件传输不适合使用XML-RPC,因为XML编码会带来较大的额外开销,建议选择其他更适合的传输方案

xmlrpcXML_RPCPython客户端服务端修改时间:2026-07-21 03:03:22

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。