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

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、付费专栏及课程。

余额充值