国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

directory search
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
characters

CodeIgniter的XML-RPC類允許您向其他服務(wù)器發(fā)送請(qǐng)求,或者設(shè)置您自己的XML-RPC服務(wù)器來(lái)接收請(qǐng)求。

  • 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?

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

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

有關(guān)詳細(xì)說(shuō)明,您可以訪問(wèn)XML-RPC站點(diǎn)。

使用XML-RPC類

初始化類

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

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

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

加載后,xml-rpc庫(kù)對(duì)象將可用:$ this-> xmlrpc

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

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

加載后,xml-rpcs庫(kù)對(duì)象將可用:$ this-> xmlrpcs

注意

在使用XML-RPC服務(wù)器類時(shí),您必須加載XML-RPC類和XML-RPC服務(wù)器類。

發(fā)送XML-RPC請(qǐng)求

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

  • 服務(wù)器的URL

  • 您希望調(diào)用的服務(wù)器上的方法

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

這是一個(gè)簡(jiǎn)單的例子,它向Ping-o-Matic發(fā)送一個(gè)簡(jiǎn)單的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();}

說(shuō)明

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

解析一個(gè)請(qǐng)求

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

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

下面是一個(gè)簡(jiǎn)單的三個(gè)參數(shù)數(shù)組的例子:

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

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

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

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

創(chuàng)建一個(gè)XML-RPC服務(wù)器

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

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

下面是一個(gè)例子來(lái)說(shuō)明:

$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();

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

'object'鍵是一個(gè)特殊的鍵,它傳遞一個(gè)實(shí)例化的類對(duì)象,當(dāng)你映射的方法不是CodeIgniter超級(jí)對(duì)象的一部分時(shí),這是必需的。

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

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

在初始化服務(wù)器類時(shí)可以使用兩個(gè)額外的配置鍵:為了啟用調(diào)試,可以將debug設(shè)置為T(mén)RUE,并且可以將xss_clean設(shè)置為FALSE以阻止通過(guò)安全庫(kù)的xss_clean()方法發(fā)送數(shù)據(jù)。

處理服務(wù)器請(qǐng)求

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

使用上面的例子,如果請(qǐng)求new_post方法,服務(wù)器將期望一個(gè)類存在于這個(gè)原型中:

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

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

以下是使用Blogger API的真實(shí)示例。Blogger API中的一種方法是getUserInfo()。使用這種方法,XML-RPC客戶端可以向服務(wù)器發(fā)送一個(gè)用戶名和密碼,作為回報(bào),服務(wù)器返回關(guān)于該特定用戶的信息(昵稱,用戶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ā)送的請(qǐng)求參數(shù)相對(duì)應(yīng)的索引數(shù)組。在上面的例子中,輸出參數(shù)將是用戶名和密碼。

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

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

格式化響應(yīng)

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

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

但是,回復(fù)通常包含多條信息。為了實(shí)現(xiàn)這一點(diǎn),我們必須將響應(yīng)放入其自己的數(shù)組中,以便主數(shù)組繼續(xù)包含單個(gè)數(shù)據(jù)。這里有一個(gè)例子顯示了這可能是如何實(shí)現(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ù)組被格式化為一個(gè)結(jié)構(gòu)體。這是響應(yīng)最常用的數(shù)據(jù)類型。

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

發(fā)送錯(cuò)誤響應(yīng)

如果您需要向客戶端發(fā)送錯(cuò)誤響應(yīng),您將使用以下內(nèi)容:

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

第一個(gè)參數(shù)是錯(cuò)誤號(hào),而第二個(gè)參數(shù)是錯(cuò)誤消息。

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

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

客戶端

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

<?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助手”。您可以在幫助者功能頁(yè)面找到更多信息。

服務(wù)器

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

<?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èn)您的網(wǎng)站:

example.com/index.php/xmlrpc_client/

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

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

在請(qǐng)求參數(shù)中使用關(guān)聯(lián)數(shù)組

如果你想在你的方法參數(shù)中使用關(guān)聯(lián)數(shù)組,你將需要使用一個(gè)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);

在服務(wù)器中處理請(qǐng)求時(shí),您可以檢索關(guān)聯(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ī)范,您可以通過(guò)XML-RPC發(fā)送七種類型的值:

  • inti4

  • 布爾

  • dateTime.iso8601

  • BASE64

  • 結(jié)構(gòu)(包含值的數(shù)組)

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

類參考

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

參數(shù):

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

返回類型:

void

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

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

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

參數(shù):

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

返回類型:

void

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

  • $ portint) - 服務(wù)器端口

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

  • $ proxy_portint) - 代理偵聽(tīng)端口

Return type:  void
設(shè)置請(qǐng)求發(fā)送到的服務(wù)器的URL和端口號(hào):

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

基本的HTTP身份驗(yàn)證也被支持,只需將其添加到服務(wù)器URL即可:

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

timeout($seconds = 5)

參數(shù):

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

返回類型:

空虛

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

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

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

這個(gè)超時(shí)時(shí)間將用于初始連接到遠(yuǎn)程服務(wù)器,以及從中獲取響應(yīng)。確保您在調(diào)用之前設(shè)置超時(shí)send_request()。

method($function)

參數(shù):

$ function(string) - 方法名稱

返回類型:

void

  • $ functionstring) - 方法名稱

Return type:  void
設(shè)置將從XML-RPC服務(wù)器請(qǐng)求的方法:

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

方法是方法的名稱。

request($incoming)

參數(shù):

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

返回類型:

void

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

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

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

send_request()

返回:

成功為T(mén)RUE,失敗為FALSE

返回類型:

布爾

display_error()

返回:

錯(cuò)誤消息字符串

返回類型:

display_response()

返回:

響應(yīng)

返回類型:

mixed

send_error_message($number, $message)

參數(shù):

$ number(int) - 錯(cuò)誤號(hào)$ message(string) - 錯(cuò)誤消息

返回:

XML_RPC_Response實(shí)例

返回類型:

XML_RPC_Response

  • $ numberint) - 錯(cuò)誤號(hào)

  • $ messagestring) - 錯(cuò)誤消息

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

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

Previous article: Next article: