XML RPC怎么用 XML-RPC远程过程调用实现方法

XML-RPC 是一种基于 XML 和 HTTP 的轻量级 RPC 协议,请求以 methodCall 包裹 methodName 和 params,响应为 methodResponse 包裹 params 或 fault,Python 用 xmlrpc.client 可简化调用。

XML-RPC 是一种轻量级的远程过程调用(RPC)协议,用 XML 编码请求和响应,通过 HTTP 传输。它不依赖复杂框架,适合简单系统间通信,比如 WordPress 的 API、老版本的博客工具或内部服务对接。

XML-RPC 请求结构怎么写

一次调用本质是发送一个 POST 请求,Body 是格式严格的 XML。核心包含三部分:methodCall 根节点、methodName(要调用的函数名)、params(参数列表,每个参数用 param 包裹,类型由 value 内的类型标签标明)。

例如调用 system.listMethods(获取服务器支持的方法列表):



  system.listMethods
  

服务端怎么接收并响应

服务端监听 HTTP POST 请求,解析 XML,提取方法名和参数,执行对应逻辑,再按 XML-RPC 规范返回 XML 响应。响应必须是 methodResponse 包裹的 params(成功)或 fault(错误)。

成功响应示例(返回字符串数组):



  
    
      
        
          
            system.listMethods
            system.getCapabilities
          

        
      

    
  

客户端怎么发请求(以 Python 为例)

Python 标准库 xmlrpc.client 封装了全部细节,不用手拼 XML 或处理 HTTP。

  • 创建代理对象:server = xmlrpc.client.ServerProxy('http://example.com/xmlrpc.php')
  • 直接像调用本地函数一样使用:methods = server.system.listMethods()
  • 传参也自然:result = server.sample.add(2, 3)(假设服务端有 sample.add 方法)
  • 异常捕获用 xmlrpc.client.Fault 处理服务端错误,socket.error 处理网络问题

注意事项和常见坑

XML-RPC 类型有限(int、string、boolean、double、dateTime.iso8601、base64、array、struct),没有 null 或自定义对象;时间必须是 ISO8601 格式;数组和结构体嵌套层级不宜过深;HTTP 头需设 Content-Type: text/xml;服务端要正确返回 200 OK 状态码,否则客户端可能解析失败。

基本上就这些。不复杂但容易忽略格式细节,建议先用现成客户端连公开测试服务(如 https://betty.userland.com/RPC2)验证流程。