『协议』XML-RPC 协议规格说明

为什么80%的码农都做不了架构师?>>>   hot3.png

这篇文章提供所有实现XML-RPC协议所需要的内容。

 


一览

XML-RPC是一个工作在因特网上的远端程序调用(Remote Procedure Calling)协议。

XML-RPC消息是一个HTTP-POST请求(Request)。请求的主题是在XML中。一个在服务器上执行的程序和它返回的值也是使用XML来格式化的。

被终端调用的程序参数可以是标量(scalars)、数值、字符串、日期等;并且还可以是混合记录和列表结构。

示例

下面是一个XML-RPC请求的例子:

   1: POST /RPC2 HTTP/1.0
   2: User-Agent: Frontier/5.1.2 (WinNT)
   3: Host: betty.userland.com
   4: Content-Type: text/xml
   5: Content-length: 181
   6: 
   7: <?xml version="1.0"?>
   8: <methodCall>
   9:     <methodName>examples.getStateName</methodName>
  10:     <params>
  11:         <param>
  12:             <value>
  13:                 <i4>41</i4>
  14:             </value>
  15:         </param>
  16:     </params>
  17: </methodCall>

头部(Header)需要

在头部第一行中的URI的格式并没有被指定。例如,如果服务器只处理XML-RPC调用的话,它可以是空的、一个简单的斜线。然而,如果服务器是处理一个混合传入HTTP请求,我们允许URI帮助将请求导向到程序处理XML-RPC请求的代码处。如,/RPC2告诉服务器将请求导向到“RPC2”响应器。

一个用户代理(User-Agent)和主机(Host)必须被指定。

内容类型(Content-Type)必须是text/xml。

内容长度(Conteng-Length)必须被指定且必须正确。

负载(Payload)格式

payload是在xml中的一个简单的<methodCall>方法调用结构。

<methodCall>必须包括<methodName>子项,一个包括被调用方法的名字的字符串。这个字符串也许只是包括标识字符(大写或小写的A-Z)、数值字符(0-9)、下划线、点、冒号、斜线。这已经足够服务器云决定如何解释方法名了。

例如,方法名可以是一个包含执行引入请求(incoming request)脚本的文件名。它可以是数据库中的一个表的单元格名。或者它可以是被一个在层级式目录中的的一文件路径。

如果程序调用有参数,<methodCall>发源包括一个<params>参数子项。这个<params>子项能够包括任意数量的<param>,每一个<param>都有一个值。

标量(scalar)<value>值

<value>值可以是标量(scalar),类型如下表所示:

TagTypeExample

<i4> or <int>

four-byte signed integer

-12

<boolean>

0 (false) or 1 (true)

1

<string>

string

hello world

<double>

double-precision signed floating point number

-12.214

<dateTime.iso8601>

date/time

19980717T14:08:55

<base64>

ase64-encoded binary

eW91IGNhbid0IHJlYWQgdGhpcyE=

如果没有指定类型,类型就是字符串。

<struct>结构

一个值可以是<struct>类型的。

一个<struct>包括<member>,每一个<member>包括一个<name>和一个<value>。

下面是一个有两个<struct>元素的例子。

   1: <struct>
   2:      <member>
   3:           <name>lowerBound</name>
   4:           <value>
   5:                <i4>18</i4>
   6:           </value>
   7:      </member>
   8:      <member>
   9:           <name>upperBound</name>
  10:           <value>
  11:                <i4>139</i4>
  12:           </value>
  13:      </member>
  14: </struct>
<struct>可以是递归的,任何<value>可以包括一个<struct>或其他类型,包括下面要描述的<array>。

<array>数组

值可以是<array>数组类型的。

一个<array>包括一个独立的<data>元素,这个元素可以包括任意多个<value>。

下面是一个四元素数组的示例:

   1: <array>
   2:    <data>
   3:       <value><i4>12</i4></value>
   4:       <value><string>Egypt</string></value>
   5:       <value><boolean>0</boolean></value>
   6:       <value><i4>-31</i4></value>
   7:    </data>
   8: </array>

<array>元素没有名字。

你可以在上面的示例中使用混合类型。

<arrays>是可以递归的,任何值可以包括一个<array>或任意的类型,包括上文描述过的<struct>。

响应(Response)示例

下面是一个对XML-RPC请求的响应示例:

   1: HTTP/1.1 200 OK
   2: Connection: close
   3: Content-Length: 158
   4: Content-Type: text/xml
   5: Date: Fri, 17 Jul 1998 19:55:08 GMT
   6: Server: UserLand Frontier/5.1.2-WinNT
   7: 
   8: <?xml version="1.0"?>
   9: <methodResponse>
  10:     <params>
  11:         <param>
  12:             <value>
  13:                 <string>South Dakota</string>
  14:             </value>
  15:         </param>
  16:     </params>
  17: </methodResponse>

响应(Response)格式

除非有一个层等级的错误,不然总是会返回200成功码。

内容类型是text/xml。内容长度必须呈现且正确。

响应体是一个简单的XML结构<methodResponse>,它可以包括一个<params>,<params>可以包括一个独立的<value>。

<methodResponse>还可以包括一个<fault>。<fault>可以包括一个<value>。<value>可以包括一个包含有两个元素的<struct>,一个元素是<faultCode>,一个元素是<faultString>。

<methodResponse>可以不包括一个<fault>和<params>。

错误(Fault)示例

   1: HTTP/1.1 200 OK
   2: Connection: close
   3: Content-Length: 426
   4: Content-Type: text/xml
   5: Date: Fri, 17 Jul 1998 19:55:02 GMT
   6: Server: UserLand Frontier/5.1.2-WinNT
   7: 
   8: <?xml version="1.0"?>
   9:     <methodResponse>
  10:         <fault>
  11:             <value>
  12:                 <struct>
  13:                     <member>
  14:                         <name>faultCode</name>
  15:                         <value>
  16:                             <int>4</int>
  17:                         </value>
  18:                     </member>
  19:                     <member>
  20:                         <name>faultString</name>
  21:                         <value>
  22:                             <string>Too many parameters.</string>
  23:                         </value>
  24:                     </member>
  25:                 </struct>
  26:              </value>
  27:     </fault>
  28: </methodResponse>
  29: 

 

策略和目标


明文。这个协议的目标是在没有新的可以超越CGI接口的力量被提供时,制订一个可以跨越不同环境的兼容性的“根据”,防火墙软件可以看到内容类型是text/xml的POSTs。

可读。我们想要一个干净的可扩展的非常简单的格式。这使得一个HTML程序员能够看懂包括XML-RPC协议调用的文件、理解这个文件的用途以及可以修改它并让它在第一次或第二次尝试后工作起来成为了可能。

容易。我们想要它成为一个可以被很容易实现去快速在不同的环境与不同的操作系统中运行的协议。

转载于:https://my.oschina.net/skyler/blog/706112

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/458295.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt之QLineEdit详解(附源码)

原博客地址&#xff1a;http://blog.csdn.net/liang19890820/article/details/52044639&#xff0c;感谢原作者总结和分享。 简述 QLineEdit是一个单行文本输入框。 QLineEdit允许用户输入和编辑单行纯文本&#xff0c;提供了很多有用的编辑功能&#xff0c;包括&#xff1a;撤…

C#json数据的序列化和反序列化(将数据转换为对象或对象集合)

引用 System.Runtime.Serialization.Json 转载于:https://www.cnblogs.com/a849788087/p/5645828.html

位图(bmp)文件格式分析

from&#xff1a;https://blog.csdn.net/qingchuwudi/article/details/25785307 位图(bmp)文件格式分析 作者&#xff1a;深蓝&#xff08;由博主分享&#xff09; 一、什么是位图 计算机能以位图和矢量图格式显示图像。 1、位图(Bitmap)&#xff1a; 图像又称点阵图或光…

java 基本功 —— 内存相关

2019独角兽企业重金招聘Python工程师标准>>> 首先我们来说说内存&#xff0c;因为从内存的角度来出发来分析一些变量&#xff0c;引用或者对象的生命周期会更好理解一些。 java是一门编程语言&#xff0c;他跟C有什么不同呢&#xff1f;本质上&#xff0c;他们都是一…

DOM事件处理有三个阶段

DOM事件处理有三个阶段&#xff1a; 捕捉阶段&#xff08;capture phase&#xff09;&#xff1a;从最上层元素&#xff0c;直到最下层&#xff08;你点击的那个target&#xff09;元素。路过的所有节点都可以捕捉到该事件。命中阶段&#xff08;target phase&#xff09;&…

客户端程序自动更新(升级)的方式

from&#xff1a;https://blog.csdn.net/woaitingting1985/article/details/72954652一、C/S自动更新原理C/S程序自动升级是一个很重要的功能&#xff0c;原理其实很简单&#xff0c;一般包含两个程序一个是主程序&#xff0c;也就是除了升级功能以外的程序&#xff0c;另一个就…

怎么用源程序把ChemDraw结构复制到Word文档

在学习化学过程中&#xff0c;不可避免的会接触到各种化学结构。这个时候就需要通过绘制化学结构来进行这方面的学习和传播。ChemDraw Professional 15就可以辅助完成这方面的工作。很多的用户朋友会通过选中后复制粘贴可以将ChemDraw结构复制到Word文档中&#xff0c;但这只是…

QT串口编程的相关类(QSerialPortInfo)

QT Serial Port相关的类只有两个QSerialPortInfo(#include<QSerialPortInfo>) 和QserialPort(#include<QSerialPort>) 先来介绍QSerialPortInfo 1&#xff1a;QSerialPortInfo(#include<QSerialPortInfo>) 该类是一个串口的辅助类类&#xff0c;提供主要是提…

用jquery写一个属于自己的音乐播放器

看到一个用css3实现的CD的动画&#xff0c;演示在这儿http://codepen.io/_kieran/pen/QNRmep 突然那我就想说给自己做一个音乐播放器吧&#xff0c;说做就做。演示在https://echolsx.github.io/music/ Github传送门&#xff1a;https://github.com/EchoLsx/music 主要代码&…

MySQL 性能监控 4 大指标

【编者按】本文作者为 John Matson&#xff0c;主要介绍 mysql 性能监控应该关注的 4 大指标。 文章系国内 ITOM 管理平台 OneAPM 编译呈现。 MySQL 是什么&#xff1f; MySQL 是现而今最流行的开源关系型数据库服务器。由 Oracle 所有&#xff0c;MySQL 提供了可以免费下载的社…

【深度相机系列四】深度相机原理揭秘--结构光(iPhone X 齐刘海原理)

from&#xff1a;https://blog.csdn.net/electech6/article/details/78707839导读 结构光法&#xff1a;为解决双目匹配问题而生 深度图效果&#xff1a;结构光vs.双目 投射图案的编码方式直接编码时分复用编码空分复用编码 Kinect1原理 iPhone X原深感相机是缩小版的更强大的K…

Android倒计时工具类

为什么80%的码农都做不了架构师&#xff1f;>>> 原文地址:http://my.oschina.net/reone/blog/710003 多谢touch_ping 的回应. 原来api有这个类 android.os.CountDownTimer , 具体实现很下面的差不多. import android.content.Context; import android.os.Handler…

深度相机原理揭秘--双目立体视觉

欢迎关注计算机视觉life&#xff01;导读 为什么非得用双目相机才能得到深度&#xff1f; 双目立体视觉深度相机的工作流程 双目立体视觉深度相机详细工作原理理想双目相机成像模型极线约束图像矫正技术基于滑动窗口的图像匹配基于能量优化的图像匹配 双目立体视觉深度相机的优…

微信扫码支付模式一和模式二的区别

http://www.baidu.com/link?urlAj_xhOM5Q6rpZXkTMBPq4o0UbCO4eLq0esX8B3K2v06bkRS8F8lC4k06rv-3uZARLLTEKJHMhwzI_cdcJiHfqK&wd&eqid904bc71f000181740000000356d7d9bf https://www.zhihu.com/question/35818812/answer/66086727 知乎页面访问存在502 Bad Gateway问题…

双目视觉几何框架详解(玉米专栏8篇汇总)

一、图像坐标&#xff1a;我想和世界坐标谈谈(A) 玉米竭力用轻松具体的描述来讲述双目三维重建中的一些数学问题。希望这样的方式让大家以一个轻松的心态阅读玉米的《计算机视觉学习笔记》双目视觉数学架构系列博客。这个系列博客旨在捋顺一下已标定的双目视觉中的数学主线。数…

(原)Ubuntu14中安装GraphicsMagick

转载请注明出处&#xff1a; http://www.cnblogs.com/darkknightzh/p/5661439.html 参考网址&#xff1a; http://comments.gmane.org/gmane.comp.video.graphicsmagick.core/514 http://www.graphicsmagick.org/INSTALL-unix.html https://github.com/clementfarabet/graphics…

世界坐标系和相机坐标系,图像坐标系的关系

from&#xff1a;https://blog.csdn.net/waeceo/article/details/50580607一、四个坐标系简介和转换相机模型为以后一切标定算法的关键&#xff0c;只有这边有相当透彻的理解&#xff0c;对以后的标定算法才能有更好的理解。本人研究了好长时间&#xff0c;几乎每天都重复看几遍…

PythonOCC 3D图形库学习—创建立方体模型

Open CASCADE&#xff08;简称OCC&#xff09;平台是是一个开源的C类库&#xff0c;OCC主要用于开发二维和三维几何建模应用程序&#xff0c;包括通用的或专业的计算机辅助设计CAD系统、制造或分析领域的应用程序、仿真应用程序或图形演示工具。 PythonOCC是对Open CASCADE的封…

Struts2、SpringMVC、Servlet(Jsp)性能对比 测试 。 Servlet的性能应该是最好的,可以做为参考基准,其它测试都要向它看齐,参照...

2019独角兽企业重金招聘Python工程师标准>>> Struts2、SpringMVC、Servlet(Jsp)性能对比 测试 。 Servlet的性能应该是最好的&#xff0c;可以做为参考基准&#xff0c;其它测试都要向它看齐&#xff0c;参照它。 做为一个程序员&#xff0c;对于各个框架的性能要有…

基于图像分割的立体匹配方法

1.绪论 立体匹配是三维重建系统的关键步骤&#xff0c;并且作为一种非接触测量方法在工业以及科研领域具有重要的应用价值。为了完成匹配工作以及获取场景的稠密视差图&#xff0c;可以通过构建能量函数对应立体匹配的约束条件。复杂能量函数的全局最优解通常是NP难问题。相对于…