亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄 搜尋
Array Array Helper Benchmarking Benchmarking Class Caching Caching Driver Calendaring Calendaring Class CAPTCHA CAPTCHA Helper Config Config Class Cookie Cookie Helper Database Connecting to your Database Custom Function Calls Database Caching Class Database Configuration Database Forge Class Database Metadata Database Quick Start: Example Code Database Reference Database Utility Class DB Driver Reference Generating Query Results Queries Query Builder Class Query Helper Methods Transactions Date Date Helper Directory Directory Helper Download Download Helper Email Email Class Email Helper Encrypt Encrypt Class Encryption Encryption Library File File Helper File Uploading File Uploading Class Form Form Helper Form Validation Form Validation FTP FTP Class Functions compatibility_functions common_functions HTML HTML Helper HTML Table HTML Table Class Image Manipulation Image Manipulation Class Inflector Inflector Helper Input Input Class Javascript Javascript Class Language Language Class Language Helper Loader Loader Class Migrations Migrations Class Number Number Helper Output Output Class Pagination Pagination Class Path Path Helper Security Security Class Security Helper Session Session Library Shopping Cart Shopping Cart Class Smiley Smiley Helper String String Helper Template Parser Template Parser Class Text Text Helper Trackback Trackback Class Typography Typography Class Typography Helper Unit Testing Unit Testing Class URI URL User Agent XML XML-RPC and XML-RPC Server Zip Encoding Zip Encoding Class XML-RPC and XML-RPC Server Classes XML Helper User Agent Class URL Helper URI Class
文字

CodeIgniter的XML-RPC類允許您向其他服務器發(fā)送請求,或者設置您自己的XML-RPC服務器來接收請求。

  • What is XML-RPC?

  • Using the XML-RPC Class

    • Explanation

    • Initializing the Class

    • Sending XML-RPC Requests

- [Anatomy of a Request](about:blank#anatomy-of-a-request)- [Creating an XML-RPC Server](about:blank#creating-an-xml-rpc-server)-  [Processing Server Requests](about:blank#processing-server-requests)    - [Notes:](about:blank#notes)
- [Formatting a Response](about:blank#formatting-a-response)- [Sending an Error Response](about:blank#sending-an-error-response)-  [Creating Your Own Client and Server](about:blank#creating-your-own-client-and-server)    - [The Client](about:blank#the-client)    - [The Server](about:blank#the-server)    - [Try it!](about:blank#try-it)
- [Using Associative Arrays In a Request Parameter](about:blank#using-associative-arrays-in-a-request-parameter)- [Data Types](about:blank#id2)
  • 類參考

What is XML-RPC?

很簡單,這是兩臺計算機使用XML通過互聯(lián)網(wǎng)進行通信的一種方式。一臺我們稱之為客戶端的計算機向另一臺計算機發(fā)送XML-RPC 請求,我們將其稱為服務器。一旦服務器收到并處理請求,它就會向客戶端發(fā)回一個響應。

例如,使用MetaWeblog API,XML-RPC客戶端(通常是桌面發(fā)布工具)將向您的站點上運行的XML-RPC服務器發(fā)送請求。此請求可能是發(fā)送用于發(fā)布的新博客條目,也可能是請求現(xiàn)有條目進行編輯。當XML-RPC服務器收到這個請求時,它將檢查它以確定應該調用哪個類/方法來處理請求。一旦處理完畢,服務器將發(fā)送回應消息。

有關詳細說明,您可以訪問XML-RPC站點。

使用XML-RPC類

初始化類

像CodeIgniter中的大多數(shù)其他類一樣,XML-RPC和XML-RPCS類在您的控制器中使用$ this-> load-> library函數(shù)進行初始化:

要加載XML-RPC類,您將使用:

$this->load->library('xmlrpc');

加載后,xml-rpc庫對象將可用:$ this-> xmlrpc

要加載XML-RPC服務器類,您將使用:

$this->load->library('xmlrpc');$this->load->library('xmlrpcs');

加載后,xml-rpcs庫對象將可用:$ this-> xmlrpcs

注意

在使用XML-RPC服務器類時,您必須加載XML-RPC類和XML-RPC服務器類。

發(fā)送XML-RPC請求

要將請求發(fā)送到XML-RPC服務器,您必須指定以下信息:

  • 服務器的URL

  • 您希望調用的服務器上的方法

  • 請求的數(shù)據(jù)(在下面解釋)。

這是一個簡單的例子,它向Ping-o-Matic發(fā)送一個簡單的Weblogs.com ping

$this->load->library('xmlrpc');$this->xmlrpc->server('http://rpc.pingomatic.com/', 80);$this->xmlrpc->method('weblogUpdates.ping');$request = array('My Photoblog', 'http://www.my-site.com/photoblog/');$this->xmlrpc->request($request);if ( ! $this->xmlrpc->send_request()){
        echo $this->xmlrpc->display_error();}

說明

上面的代碼初始化XML-RPC類,設置要調用的服務器URL和方法(weblogUpdates.ping)。請求(在這種情況下,您的站點的標題和URL)被放入一個數(shù)組中以便運輸,并使用request()函數(shù)進行編譯。最后,發(fā)送完整的請求。如果send_request()方法返回false,我們將顯示從XML-RPC服務器發(fā)回的錯誤消息。

解析一個請求

XML-RPC請求就是您發(fā)送到XML-RPC服務器的數(shù)據(jù)。請求中的每條數(shù)據(jù)都稱為請求參數(shù)。上面的例子有兩個參數(shù):網(wǎng)站的URL和標題。當XML-RPC服務器收到您的請求時,它將查找它需要的參數(shù)。

請求參數(shù)必須放置在數(shù)組中以便運輸,并且每個參數(shù)可以是七種數(shù)據(jù)類型之一(字符串,數(shù)字,日期等)。如果你的參數(shù)不是字符串,你將不得不在請求數(shù)組中包含數(shù)據(jù)類型。

下面是一個簡單的三個參數(shù)數(shù)組的例子:

$request = array('John', 'Doe', 'www.some-site.com');$this->xmlrpc->request($request);

如果使用字符串以外的數(shù)據(jù)類型,或者如果您有多種不同的數(shù)據(jù)類型,則將每個參數(shù)放入其自己的數(shù)組中,數(shù)據(jù)類型位于第二個位置:

$request = array(        array('John', 'string'),        array('Doe', 'string'),        array(FALSE, 'boolean'),        array(12345, 'int'));$this->xmlrpc->request($request);

下面的數(shù)據(jù)類型部分有一個完整的數(shù)據(jù)類型列表。

創(chuàng)建一個XML-RPC服務器

XML-RPC服務器充當各種流量警察,等待傳入的請求并將它們重定向到適當?shù)暮瘮?shù)進行處理。

要創(chuàng)建自己的XML-RPC服務器,需要在控制器中初始化希望傳入請求出現(xiàn)的XML-RPC服務器類,然后使用映射指令設置數(shù)組,以便傳入的請求可以發(fā)送到相應的類和方法處理。

下面是一個例子來說明:

$this->load->library('xmlrpc');$this->load->library('xmlrpcs');$config['functions']['new_post'] = array('function' => 'My_blog.new_entry');$config['functions']['update_post'] = array('function' => 'My_blog.update_entry');$config['object'] = $this;$this->xmlrpcs->initialize($config);$this->xmlrpcs->serve();

以上示例包含一個指定服務器允許的兩個方法請求的數(shù)組。允許的方法在數(shù)組的左側。當收到其中任何一個時,它們將被映射到右側的類和方法。

'object'鍵是一個特殊的鍵,它傳遞一個實例化的類對象,當你映射的方法不是CodeIgniter超級對象的一部分時,這是必需的。

換句話說,如果XML-RPC客戶端發(fā)送new_post方法的請求,您的服務器將加載My_blog類并調用new_entry函數(shù)。如果請求是針對update_post方法的,那么您的服務器將加載My_blog類并調用該update_entry()方法。

上例中的函數(shù)名稱是任意的。您將決定在服務器上應該調用哪些應用程序,或者如果您使用的是標準化API(如Blogger或MetaWeblog API),則可以使用它們的函數(shù)名稱。

在初始化服務器類時可以使用兩個額外的配置鍵:為了啟用調試,可以將debug設置為TRUE,并且可以將xss_clean設置為FALSE以阻止通過安全庫的xss_clean()方法發(fā)送數(shù)據(jù)。

處理服務器請求

當XML-RPC服務器接收到一個請求并加載類/方法進行處理時,它會將一個對象傳遞給包含客戶端發(fā)送數(shù)據(jù)的方法。

使用上面的例子,如果請求new_post方法,服務器將期望一個類存在于這個原型中:

class My_blog extends CI_Controller {        public function new_post($request)        {        }}

$ request變量是服務器編譯的一個對象,它包含由XML-RPC客戶端發(fā)送的數(shù)據(jù)。使用這個對象,你將有權訪問請求參數(shù),使你能夠處理請求。完成后,您將向客戶發(fā)送回應。

以下是使用Blogger API的真實示例。Blogger API中的一種方法是getUserInfo()。使用這種方法,XML-RPC客戶端可以向服務器發(fā)送一個用戶名和密碼,作為回報,服務器返回關于該特定用戶的信息(昵稱,用戶ID,電子郵件地址等)。以下是處理函數(shù)的外觀:

class My_blog extends CI_Controller {        public function getUserInfo($request)        {
                $username = 'smitty';
                $password = 'secretsmittypass';

                $this->load->library('xmlrpc');

                $parameters = $request->output_parameters();                if ($parameters[1] != $username && $parameters[2] != $password)                {                        return $this->xmlrpc->send_error_message('100', 'Invalid Access');                }

                $response = array(                        array(                                'nickname'  => array('Smitty', 'string'),                                'userid'    => array('99', 'string'),                                'url'       => array('http://yoursite.com', 'string'),                                'email'     => array('[email protected]', 'string'),                                'lastname'  => array('Smith', 'string'),                                'firstname' => array('John', 'string')                        ),                         'struct'                );                return $this->xmlrpc->send_response($response);        }}

筆記:

output_parameters()方法檢索與客戶端發(fā)送的請求參數(shù)相對應的索引數(shù)組。在上面的例子中,輸出參數(shù)將是用戶名和密碼。

如果客戶端發(fā)送的用戶名和密碼無效,并且使用返回錯誤消息send_error_message()。

如果操作成功,客戶端將返回一個包含用戶信息的響應數(shù)組。

格式化響應

請求類似,響應必須被格式化為一個數(shù)組。但是,與請求不同,響應是包含單個項目的數(shù)組。該項可以是一個包含多個附加數(shù)組的數(shù)組,但只能有一個主數(shù)組索引。換句話說,基本原型是這樣的:

$response = array('Response data', 'array');

但是,回復通常包含多條信息。為了實現(xiàn)這一點,我們必須將響應放入其自己的數(shù)組中,以便主數(shù)組繼續(xù)包含單個數(shù)據(jù)。這里有一個例子顯示了這可能是如何實現(xiàn)的:

$response = array(        array(                'first_name' => array('John', 'string'),                'last_name' => array('Doe', 'string'),                'member_id' => array(123435, 'int'),                'todo_list' => array(array('clean house', 'call mom', 'water plants'), 'array'),        ),        'struct');

注意上面的數(shù)組被格式化為一個結構體。這是響應最常用的數(shù)據(jù)類型。

與請求一樣,響應可以是“數(shù)據(jù)類型”部分中列出的七種數(shù)據(jù)類型之一。

發(fā)送錯誤響應

如果您需要向客戶端發(fā)送錯誤響應,您將使用以下內容:

return $this->xmlrpc->send_error_message('123', 'Requested data not available');

第一個參數(shù)是錯誤號,而第二個參數(shù)是錯誤消息。

創(chuàng)建您自己的客戶端和服務器

為了幫助您了解迄今為止所介紹的所有內容,我們創(chuàng)建一個用作XML-RPC客戶端和服務器的控制器。您將使用客戶端向服務器發(fā)送請求并接收響應。

客戶端

使用文本編輯器創(chuàng)建一個名為Xmlrpc_client.php的控制器。在它中,放置這些代碼并將其保存到您的應用程序/控制器/文件夾中:

<?phpclass Xmlrpc_client extends CI_Controller {        public function index()        {
                $this->load->helper('url');
                $server_url = site_url('xmlrpc_server');

                $this->load->library('xmlrpc');

                $this->xmlrpc->server($server_url, 80);
                $this->xmlrpc->method('Greetings');

                $request = array('How is it going?');
                $this->xmlrpc->request($request);                if ( ! $this->xmlrpc->send_request())                {
                        echo $this->xmlrpc->display_error();                }                else                {
                        echo '<pre>';                        print_r($this->xmlrpc->display_response());
                        echo '</pre>';                }        }}?>

注意

在上面的代碼中,我們使用了“url助手”。您可以在幫助者功能頁面找到更多信息。

服務器

使用文本編輯器創(chuàng)建一個名為Xmlrpc_server.php的控制器。在它中,放置這些代碼并將其保存到您的應用程序/控制器/文件夾中:

<?phpclass Xmlrpc_server extends CI_Controller {        public function index()        {
                $this->load->library('xmlrpc');
                $this->load->library('xmlrpcs');

                $config['functions']['Greetings'] = array('function' => 'Xmlrpc_server.process');

                $this->xmlrpcs->initialize($config);
                $this->xmlrpcs->serve();        }        public function process($request)        {
                $parameters = $request->output_parameters();

                $response = array(                        array(                                'you_said'  => $parameters[0],                                'i_respond' => 'Not bad at all.'                        ),                        'struct'                );                return $this->xmlrpc->send_response($response);        }}

嘗試一下!

現(xiàn)在使用類似下面的網(wǎng)址訪問您的網(wǎng)站:

example.com/index.php/xmlrpc_client/

您現(xiàn)在應該看到您發(fā)送給服務器的消息,并將其響應回復給您。

您創(chuàng)建的客戶端會向服務器發(fā)送一條消息(“該怎么回事?”)以及“Greetings”方法的請求。服務器接收請求并將其映射到process()發(fā)送響應的方法。

在請求參數(shù)中使用關聯(lián)數(shù)組

如果你想在你的方法參數(shù)中使用關聯(lián)數(shù)組,你將需要使用一個struct數(shù)據(jù)類型:

$request = array(        array(                // Param 0                array('name' => 'John'),                'struct'        ),        array(                // Param 1                array(                        'size' => 'large',                        'shape'=>'round'                ),                'struct'        ));$this->xmlrpc->request($request);

在服務器中處理請求時,您可以檢索關聯(lián)數(shù)組。

$parameters = $request->output_parameters();$name = $parameters[0]['name'];$size = $parameters[1]['size'];$shape = $parameters[1]['shape'];

數(shù)據(jù)類型

根據(jù)XML-RPC規(guī)范,您可以通過XML-RPC發(fā)送七種類型的值:

  • inti4

  • 布爾

  • dateTime.iso8601

  • BASE64

  • 結構(包含值的數(shù)組)

  • 數(shù)組(包含值數(shù)組)

類參考

class CI_Xmlrpcinitialize([$config = array()])

參數(shù):

$ config(array) - 配置數(shù)據(jù)

返回類型:

void

  • $ configarray) - 配置數(shù)據(jù)

Return type:  void
初始化XML-RPC庫。接受包含您的設置的關聯(lián)數(shù)組。

server($url[, $port = 80[, $proxy = FALSE[, $proxy_port = 8080]]])

參數(shù):

$ url(string) -  XML-RPC服務器URL $ port(int) - 服務器端口$ proxy(字符串) - 可選代理$ proxy_port(int) - 代理偵聽端口

返回類型:

void

  • $ url字符串) -  XML-RPC服務器URL

  • $ portint) - 服務器端口

  • $ proxy字符串) - 可選代理

  • $ proxy_portint) - 代理偵聽端口

Return type:  void
設置請求發(fā)送到的服務器的URL和端口號:

$this->xmlrpc->server('http://www.sometimes.com/pings.php', 80);

基本的HTTP身份驗證也被支持,只需將其添加到服務器URL即可:

$this->xmlrpc->server('http://user:[email protected]/', 80);

timeout($seconds = 5)

參數(shù):

$ seconds(int) - 以秒為單位的超時

返回類型:

空虛

  • $ secondsint) - 以秒為單位的超時

Return type:  void
設置超時期限(以秒為單位),之后請求將被取消:

$this->xmlrpc->timeout(6);

這個超時時間將用于初始連接到遠程服務器,以及從中獲取響應。確保您在調用之前設置超時send_request()。

method($function)

參數(shù):

$ function(string) - 方法名稱

返回類型:

void

  • $ functionstring) - 方法名稱

Return type:  void
設置將從XML-RPC服務器請求的方法:

$this->xmlrpc->method('method');

方法是方法的名稱。

request($incoming)

參數(shù):

$ incoming(array) - 請求數(shù)據(jù)

返回類型:

void

  • $ incomingarray) - 請求數(shù)據(jù)

Return type:  void
獲取一組數(shù)據(jù)并構建發(fā)送到XML-RPC服務器的請求:

$request = array(array('My Photoblog', 'string'), 'http://www.yoursite.com/photoblog/'); $this->xmlrpc->request($request);

send_request()

返回:

成功為TRUE,失敗為FALSE

返回類型:

布爾

display_error()

返回:

錯誤消息字符串

返回類型:

display_response()

返回:

響應

返回類型:

mixed

send_error_message($number, $message)

參數(shù):

$ number(int) - 錯誤號$ message(string) - 錯誤消息

返回:

XML_RPC_Response實例

返回類型:

XML_RPC_Response

  • $ numberint) - 錯誤號

  • $ messagestring) - 錯誤消息

Returns:  XML\_RPC\_Response instance
Return type:  XML\_RPC\_Response
此方法可讓您從服務器向客戶端發(fā)送錯誤消息。第一個參數(shù)是錯誤號,第二個參數(shù)是錯誤消息。

返回$ this-> xmlrpc-> send_error_message(123,'請求的數(shù)據(jù)不可用');

上一篇: 下一篇: