『协议』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;撤…

POJ 1323 Game Prediction#贪心

(&#xff5e;&#xffe3;▽&#xffe3;)&#xff5e;* //既然是求最少能胜几次 //说明对方是要尽可能让我输 //但为了避免浪费&#xff0c;对方会用比我的牌大的牌中的最小pip的牌来击败我 #include<iostream> #include<cstdio> #include<cstring> #inclu…

qt学习之键盘事件( keyPressEvent)

//最近一直忙于做驱动&#xff0c;对底层东西很是好奇&#xff0c;好奇键盘是 怎么区分每个键值的&#xff0c;又是怎么响应的&#xff01;因此&#xff0c;就有了下面这些代码//环境windows 工具qt 语言c//在主窗体类中声明键盘响应函数 void keyPressEvent(QKeyEvent * event…

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; 图像又称点阵图或光…

汇付 支付,痛苦的接入过程

有文档&#xff0c;但是&#xff0c;写文档的人明白&#xff0c;看文档的人很有难度。 没有SDK&#xff0c;要自已写。 然后&#xff0c;钱的流入流出都必须经过虚拟钱包&#xff0c;提现还要绑取现卡&#xff0c;这个我也能理解&#xff0c;不能理解的是&#xff0c;订单退款&…

随笔分类 - HALCON学习例程中文详解

from: https://www.cnblogs.com/chita/category/563492.html随笔分类 - HALCON学习例程中文详解HALCON学习例程中文详解跟我学机器视觉-HALCON学习例程中文详解-测量圆环脚宽间距摘要: 跟我学机器视觉-HALCON学习例程中文详解-测量圆环脚宽间距* This example program demonstr…

WinCE6 如何去掉控制面板中的应用?

在WINCE600/PUBLIC/WCESHELLFE/OAK/FILES/wceshellfe.bib把对应的cpl 干掉例如区域设置 好像是2个 ; CESYSGEN IF WCESHELLFE_MODULES_INTLPintlp.cpl $(_FLATRELEASEDIR)/intlp.cpl NK SH ; CESYSGEN ENDIF ; CESYSGEN IF WCESHELLFE_MODULES_INTLLintll.cpl $(_FLATRELEASEDI…

软件自动更新解决方案及QT实现

from&#xff1a;https://blog.csdn.net/hulinhulin/article/details/46839107软件自动更新解决放案及QT实现...11 文件的版本控制-XML.22 更新程序的实现...22.1 界面设置...22.2 程序功能...32.2.1 下载网络数据...32.2.2 XML文件的分析...62.2.3 下载XML文件的DownLoadXML函…

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;但这只是…

网络流(最大流) HDU 1565 方格取数(1) HDU 1569 方格取数(2)

HDU 1565 方格取数(1)给你一个n*n的格子的棋盘&#xff0c;每个格子里面有一个非负数。从中取出若干个数&#xff0c;使得任意的两个数所在的格子没有公共边&#xff0c;就是说所取的数所在的2个格子不能相邻&#xff0c;并且取出的数的和最大。 Input 包括多个测试实例&#…

python学习 第一篇 基础

上周报名了reboot python 课程&#xff0c;终于下决心要把python 搞好了&#xff0c;希望自己能坚持下来&#xff0c;并得到自己想要的成绩#coding:utf-8 #呵呵 #print hello world #xhello world #print x #xraw_input(hello world) #print x #int #print 23 #print 12*3 #pri…

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 主要代码&…

四年一闰 随笔

今天日子比较特殊&#xff0c;碰到闰年的2月29日。好久没有记录随笔了&#xff0c;今天随便记上几笔吧 1、上家公司居然没帮我交社保&#xff0c;一整年了&#xff0c;发工资时还照扣社保的钱。。。现在说会补差额给我&#xff0c;算下来一年XXXX&#xff0c;也只是个数字&…

Qt 串口类QSerialPort 使用笔记

Qt 串口类QSerialPort 使用笔记虽然现在大多数的家用PC机上已经不提供RS232接口了。但是由于RS232串口操作简单、通讯可靠&#xff0c;在工业领域中仍然有大量的应用。Qt以前的版本中&#xff0c;没有提供官方的对RS232串口的支持&#xff0c;编写串口程序很不方便。现在好了&a…

什么是H标签?H1,H2,H3标签?以及和strong标签使用的方法及重要性

大家都知道&#xff0c;seo的一个很重要的一点就是要把网站做的条理清晰&#xff0c;让搜索引擎很容易的读明白&#xff0c;这个条理清晰不仅体现在网站的物理路径&#xff0c;url等地 方。在<h1><h2><h3>等方面也是这样。并不是<h1>对于关键字排名有帮…