XML-RPC Web服务协议介绍[一]

本文介绍了XML-RPC协议的基本概念及其在Web开发中的应用。XML-RPC是一种轻量级的远程过程调用协议,使用XML编码数据并通过HTTP进行传输。文章详细解释了如何构建XML-RPC请求和响应,并提供了PHP实现的例子。

XML-RPC 是一种跨平台的远程调用协议,适合在Internet上传输。客户端通过HTTP协议向服务器发送一个POST请求,POST数据用XML编码;服务器收到请求后,提取POST数据,获取调用方法和参数,然后执行,最后返回XML格式的结果。

 

 采用XML-RPC协议,不同的服务器之间可以相互通信,调用远程过程。相比SOAP,XML-RPC要简单,更适合web开发。

一个简单的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>

即使从未接触也很容易明白:examples.getStateName是远程调用方法,41则是调用参数,服务器位置是betty.userland.com/RPC2

发送头要求:

1、POST后面的路径不是必须的,如果服务器只处理XML-RPC请求,此处可以省略;如果服务器还要处理HTTP请求,应将服务器的路径补全。

2、User-Agent和Host必须指明。

3、Content-Type必须是text/xml格式。

4、发送的字节数必须指明,而且必须正确。

5、其他头信息根据需要可以添加。

 

用PHP很容易实现

$xml="some request in xml format";  //请求数据
$fp=fopen($host,$port,$error,$errstr,10);
if($error)
    
die($errstr);
fwrite($fp,"POST / HTTP1.1 ");
fwrite($fp,"User-Agent: XML-RPC Client ");
fwrite($fp,"Host: $host ");
fwrite($fp,"Content-Type: text/xml ");
fwrite($fp,"Content-Length: ".strlen($xml)." ");
while($data=fread($fp,1024)) {
    
//do something here
}
fclose($fp);

XML请求只有一个根元素<methodCall>,紧接着根元素是调用方法名<methodName>,指明要调用的远程过程,最后是参数列表。参数列表以<params>开始,其下每个参数用<param>包括。参数必须指明数值类型,如未指明,默认是string类型。可支持的简单类型有int(或者i4)、boolean、string、base64、double、dateTime.iso8601,复杂数据类型支持数组array和结构struct类型,如果要传输对象类型的数据,必须先将对象转换为struct类型,即将对象的属性导出为struct。

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>
   
<data>
      
<value><i4>12</i4></value>
      
<value><string>Egypt</string></value>
      
<value><boolean>0</boolean></value>
      
<value><i4>-31</i4></value>
     
</data>
 
</array>
 
复杂数据类型可以相互嵌套:
<struct>
   
<member>
      
<name>lowerBound</name>
      
<value><i4>18</i4></value>
      
</member>
   
<member>
      
<name>upperBound</name>
      
<value><i4>139</i4></value>
   
</member>
   
<member>
      
<name>array</name>
      
<value>
          
<array>
              
<data>
                  
<value><i4>12</i4></value>
                  
<value><string>Egypt</string></value>
                  
<value><boolean>0</boolean></value>
                  
<value><i4>-31</i4></value>
               
</data>
         
</array>
      
</value>
   
</member>
</struct>

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值