茫茫網海中的冷日 - 對這文章發表回應
茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1729107 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
IMG_60D_00286.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

對這文章發表回應

發表限制: 非會員 可以發表

發表者: 冷日 發表時間: 2010/10/18 12:55:04
實戰WebService I: XML-PRC篇(基於php)

XML-RPC是一種簡單的,輕量級的通過HTTP協議進行RPC通信的規範。一個XML-RPC消息就是一個請求體為XML的HTTP-POST請求,被調用的方法在服務器端執行並將執行結果以XML格式編碼後返回。 XML-RPC 和SOAP是創建web services的兩種標準協議。XML-RPC是出現較早的(也比較簡單),而SOAP較新,也比較複雜。Microsoft的.NET就是基於 SOAP,而很多流行的WEB程序,如Frontier和blogger,則提供XML-RPC接口。

PHP通過xmlrpc擴展提供SOAP和XML-RPC的訪問途徑。xmlrpc基於xmlrpc-epi項目(更多信息請查看http://xmlrpc-epi.sourceforge.net)。xmlrpc擴展默認是不可用的,你需要在編譯PHP時加上–with-xmlrpc選項來啟用該擴展。

以下是通過ethereal抓到的一個典型的XML-RPC調用包(為便於閱讀,進行了格式化):

1. 請求報文格式

POST /xmlrpc HTTP/1.1
Content-Type: text/xml
User-Agent: Apache XML RPC 3.0 (Jakarta Commons httpclient Transport)
Host: 135.252.156.147:8080
Content-Length: 260
<?xml version="1.0" encoding="UTF-8"?>
<methodCall xmlns:ex="http://ws.apache.org/xmlrpc/namespaces/extensions">
      <methodName>Calculator.add</methodName>
      <params>
            <param>
                  <value>
                        <i4>2</i4>
                  </value>
            </param>
            <param>
                  <value>
                        <i4>3</i4>
                  </value>
            </param>
      </params>
</methodCall>


2. 報文返回格式

而對應的返回數據包為:

HTTP/1.1 200 OK
Server: Apache XML-RPC 1.0
Connection: close
Content-Type: text/xml
Content-Length: 189
<?xml version="1.0" encoding="UTF-8"?>
<methodResponse xmlns:ex="http://ws.apache.org/xmlrpc/namespaces/extensions">
      <params>
            <param>
                  <value>
                        <i4>5</i4>
                  </value>
            </param>
      </params>
</methodResponse>

其格式很簡單,幾乎是不言自明的,分別用methodCall和methodResponse標籤標識發送給Server的調用請求和Server的返回結果,請求方法的名稱用methodName標識,參數用params和param標識,而參數的類型標籤則如下表所示:

示例

XML-RPC需要PECL擴展支持,在Windows下,對應的dll文件是:php_xmlrpc.dll
寫一個XML-RPC服務器

<?php
 //該函數暴露給客名端的名稱為「multiply( )」
 function times ($method, $args) {
   return $args[0] * $args[1];
 }
 $request = $HTTP_RAW_POST_DATA;
 if (!$request) $request_xml = $HTTP_POST_VARS['xml'];

 $server = xmlrpc_server_create(  );

 if (!$server) die("Couldn't create server");
 xmlrpc_server_register_method($server, 'multiply', 'times');
 $options = array('output_type' => 'xml', 'version' => 'auto');
 echo xmlrpc_server_call_method($server, $request, null, $options);

 xmlrpc_server_destroy($server);
?>

客戶端

XML-RPC客戶端的主要工作是發出HTTP請求和解析服務器發回的響應。PHP所帶的xmlrpc擴展可以將XML-RPC請求用XML編碼,但它不知道如何發送HTTP請求。如果要具有這樣的功能,可以從http://xmlrpc-epi.sourceforge.net下載xmlrpc-epi程序包,然後安裝其中的sample/utils/utils.php文件。該文件包含一個可以執行HTTP請求的函數。

<?php
  require_once('utils.php');
  $options = array('output_type' => 'xml', 'version' => 'xmlrpc');
  $result = xu_rpc_http_concise(
    array(method  => 'multiply',
          args     => array(9, 6),
          host     => 'localhost',
          uri      => '/php/rpc_webservice/xmlrpc_server.php',
          options => $options)
  );
  //echo $result;
  echo "9 * 6 is $result";
?>

還有一些XML-RPC特性這裡未提及,如XML-RPC的數據類型並不總是與PHP的數據類型精確對應,但可以將這些值編碼成特殊的數據類型而不採用 xmlrpc擴展通過最佳猜測選擇的數據類型。當然,PHP的xmlrpc擴展的一些特性我們也沒有介紹,如SOAP錯誤。想知道全部細節,請查看http://www.php.net , 上面有xmlrpc擴展的詳細文檔。


原文出處:实战WebService I: XML-PRC篇(基于php) - 百草园 - JavaEye技术网站
內容圖示
url email imgsrc image code quote
樣本
bold italic underline linethrough   












 [詳情...]
validation picture

注意事項:
預覽不需輸入認證碼,僅真正發送文章時才會檢查驗證碼。
認證碼有效期10分鐘,若輸入資料超過10分鐘,請您備份內容後,重新整理本頁並貼回您的內容,再輸入驗證碼送出。

選項

Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|