zoukankan      html  css  js  c++  java
  • XMLRPC协议【转】

    【http://hedong.3322.org/archives/000470.html】

    XML-RPC协议

      xml-rpc 是一套规范及其一系列的实现,允许运行在不同操作系统、不同环境的程序基于internet进行远程过程调用。
      这种远程过程调用使用http作为传输协议,xml作为传送信息的编码格式。Xml-Rpc的定义尽可能的保持了简单,但同时能够传送、处理、返回复杂的数据结构。

      Xml-rpc是工作在internet上的远程过程调用协议。一个xml-rpc消息就是一个请求体为xml的http-post请求,被调用的方法在服务器端执行并将执行结果以xml格式编码后返回。
      过程调用参数可以是标量、数值、字符串、日期等,也可以是复杂的记录或列表结构(list structures,即数组类型).
      XML-RPC请求的例子:
    POST /RPC2 HTTP/1.0
    User-Agent: Frontier/5.1.2 (WinNT)
    Host: betty.userland.com
    Content-Type: text/xml
    Content-length: 181

    <?xml version="1.0"?<
    <methodCall<
       <methodName<examples.getStateName</methodName<
       <params<
          <param<
             <value<<i4<41</i4<</value<
           </param<
        </params<
    </methodCall<
      请求头部的要求:

    • 第 一行中,URI的格式可以不指定。例如,如果服务只处理XML-RPC调用, 它可以为空,或只是一个斜线。然而,如果服务器要处理各种HTTP请求,则我们应让URI能帮助将请求路由到处理这个XML-RPC请求的代码上。 (例子中,URI是/RPC2, 这告诉服务器将这个请求路由到“RPC2”应答程序上.)

    • User-Agent和Host必须指定.

    • Content-Type须是text/xml.

    • Content-Length必须指定且必须正确.

      有效负载的格式:
    • 有效的信息在一个单一的XML结构<methodCall> 中.

    • <methodCall> 须含有一个<methodName>子项,这是一个字符串,含有要调用的方法(过程)的名字。该字符串只能含有字母(大小写A-Z), 数字(0-9), 下划线, 点, 冒号和斜线(/). 服务器决定如何解释methodName的字符.
    • 例如,methodName 可能是一个脚本的名字(脚本在接到某个请求时运行),可能是一个数据库表中某个记录的某个字段,或可能是一个含有目录和文件的结构的文件的路径名。
    • 如 果过程调用有参数则 <methodCall> 必须包含一个<params>子项. <params> 可以包含任意数量的 <param>子项, 每个<param>含有一个<value>子项.

      标量数据类型(scalar )
      参数值<value>可以是标量,用类型标签将值包括起来。如果没指定类型,则认为是string类型。类型标签如下表:
    TagTypeExample
    <i4> or <int>4字节带符号整数值-12
    <boolean>0 (false) or 1 (true)1
    <string>字符串hello world
    <double>双精度带符号浮点值-12.214
    <dateTime.iso8601>日期/时间19980717T14:08:55
    <base64>base64编码的二进制数据eW91IGNhbid0IHJlYWQgdGhpcyE=

      结构数据类型(<struct>)
      参数值也可以是<struct>类型一个<struct>可含有几个<member>项,每 个<member>含有一个<name>项和一个<value>项。<member> 的<value>值可以为任何类型,可为标量类型、<array>甚至<struct>(即可以递归).例子:
    <struct>
       <member>
          <name>lowerBound</name>
          <value><i4>18</i4></value>
          </member>
       <member>
          <name>upperBound</name>
          <value><i4>139</i4></value>
          </member>
    </struct>
      数组数据类型(<array>)
      参数值也可以是<array>类型一个<array>含有单一的 <data> 元素,<data>元素可以含有任意数量的<value>, 这里的<value>没有name.每个<value>的数据类型可各不相同,如下例所示。
      <data>的<value>值可以为任何类型,可为标量类型、 <struct>甚至<array>(即可以递归).
    <array>
       <data>
          <value><i4>12</i4></value>
          <value><string>Egypt</string></value>
          <value><boolean>0</boolean></value>
          <value><i4>-31</i4></value>
        </data>
    </array>
      XML-RPC应答的一个例子:
    HTTP/1.1 200 OK
    Connection: close
    Content-Length: 158
    Content-Type: text/xml
    Date: Fri, 17 Jul 1998 19:55:08 GMT
    Server: UserLand Frontier/5.1.2-WinNT

    <?xml version="1.0"?>
    <methodResponse>
      <params>
       <param>
         <value><string>South Dakota</string></value>
        </param>
      </params>
    </methodResponse>
      XML-RPC应答格式:

    • 除非有低层错误,总是要返回200 OK.
    • Content-Type须是 text/xml. Content-Length 必须出现且值准确.
    • 应答包体是一个单一XML结构 <methodResponse>, 它可以包含单一的<params> ,<params>含有单一的<param>, <param> 含有单一<value>.
    • <methodResponse> 也可以包含一个<fault>, 它含有一个<struct>类型的<value>,这个<struct>中含有两个元素,一个名 为<faultCode>的<int>值,一个名为 <faultString>的<string>.
    • <methodResponse>不能同时包含 <fault> 和<params>.

      XML-RPC调用失败时的应答的例子:
    HTTP/1.1 200 OK
    Connection: close
    Content-Length: 426
    Content-Type: text/xml
    Date: Fri, 17 Jul 1998 19:55:02 GMT
    Server: UserLand Frontier/5.1.2-WinNT

    <?xml version="1.0"?>
    <methodResponse>
       <fault>
          <value>
             <struct>
                <member>
                   <name>faultCode</name>
                   <value><int>4</int></value>
                </member>
                <member>
                   <name>faultString</name>
                   <value><string>Too many parameters.</string></value>
                </member>
             </struct>
          </value>
       </fault>
    </methodResponse>
      策略与目标:

    • Firewalls. 这个协议的目标,是在不同的环境之间,铺设一个兼容性的基础,它没有超越CGI能力的新功能。防火墙软件可以监视Content-Type为text/xml的post类型的请求。

    • Discoverability. 我们要求它是一个简单的、 干净的可扩展的的格式。它应该可能满足: 一个HTML编码器能够通过读一个含有XML-RPC的文件, 明白它在做什么, 且能修改它以及 在第一次或第二次请求时让它工作起来.

    • Easy to implement. 我们还要求它是一个易于实现的协议,能很快在其它的环境或操作系统上跑起来。

    参考资料:
    1. Dave Winer, XML-RPC Specification, http://www.xmlrpc.com/spec

    2. Trier, XML-RPC入门, http://www.javaresearch.org/article/showarticle.jsp?column=46&thread=4037

    3. Userland, XML-RPC Home,
      http://www.xmlrpc.com/

    Posted by Hilton at February 9, 2004 09:25 PM | TrackBack
    Comments

    一般用这个开源包,
    http://ws.apache.org/xmlrpc/

    Posted by: Hilton at February 18, 2004 05:34 PM

  • 相关阅读:
    (单例)使用同步基元变量来检测程序是否已运行
    使用委托解决方法的跨线程调用问题
    Rtmp/Hls直播、点播服务器部署与配置
    关于C#调用广州医保HG_Interface.dll调用的一些总结(外部组件异常)
    redhat7.3配置163 yum源
    模块化InnoSetup依赖项安装
    [迷宫中的算法实践]迷宫生成算法——递归分割算法
    [新手学Java]使用beanUtils控制javabean
    【HTML5】Canvas绘图详解-1
    【Swift 】- 闭包
  • 原文地址:https://www.cnblogs.com/ubunoon/p/1337879.html
Copyright © 2011-2022 走看看