網站運營
上海(上海網務網絡)
Tel︰13124812420
Fax︰021-51097877
QQ︰29011218
建站經驗 首頁 / 網站運營 / 建站經驗
如何在 WordPress 發起 HTTP Requests
發布時間︰2009-11-09 09:09:42 瀏覽率︰【字體︰ 打印 DOC
收藏到︰

在 PHP 中發起 HTTP 請求並不是很難,有很多種方法︰使用 fopen()函數,使用 cURL 擴展,使用文件操作函數如 fsockopen() 和 fwrite()。但是問題是各種方法所依賴的服務器的配置把不同,有些服務器可能無法支持,不過 WordPress 自身開發了新的 API 使得在所有環境下都非常容易發起 HTTP Requests。

PHP 類︰WP_Http

WordPress 2.7 開始引入了一個新的 PHP Class︰WP_Http(在 wp-includes 目錄 http.php 文件中)。這個 Class 的強大之處是它會檢測服務器的情況,選擇最好的方法去實現 HTTP 請求,所以我們自己無須去檢測 HTTP 擴展,fopen(),是否存在 curl_init() 函數,這個 Class 都會包辦這些檢測。

這個 Class 的基本使用方法如下︰

$request = new WP_Http;
$result = $request->request( 'http://some.url.you-need.to-fetch' );

返回的變量 $result 是一個數組,它包含以下東西︰

以下為引用的內容︰
  • ‘headers’: 返回的 headers 數組,如 “x-powered-by” => “PHP/5.2.1〞
  • ‘body’: 返回字符串,和你使用瀏覽器看到一樣的。
  • ‘response’: 返回代碼的數組,如果獲取了這個代碼 (’code’=>200, ‘message’=>’OK’),說明你的 HTTP Request 成功了。
  • ‘cookies’: 返回 cookie 信息數組。
  • 下面是具體的例子︰

    簡單的 GET 請求

    假設你想在 Twitter 上搜索所有含有你 ID 的信息︰

    $url = 'http://search.twitter.com/search.json?q=@denishua';
    $request = new WP_Http;
    $result = $request->request( $url );
    $json = $result['body'];

    接下來就是 JSON 解碼的事情了。

    基本的 POST 請求

    如過你需要傳遞一些參數,如 nick=’denishua’ 和 mood=’happy’,可以使用 POST 方法︰

    $body = array(
      
    'nick' => 'denishua',
      
    'mood' => 'happy'
    );
    $url = 'http://your.api.url/';
    $request = new WP_Http;
    $result = $request->request( $url, array( 'method' => 'POST', 'body' => $body) );
    // test $result['response'] and if OK do something with $result['body']

    需要驗證的 POST 請求

    假如你需要使用 Twitter Stauts Update API 更新 Twitter,你需要首先驗證你的 Twitter 賬戶,我們需要發送一個含有用戶名和密碼對的 base64 編碼的字符串給 Twitter,詳細如下︰

    // You would edit the following:
    $username = 'denishua'; // Twitter login
    $password = '123456'; // Twitter password
    $message = "I'm posting with the API";
    // Now, the HTTP request:
    $api_url = 'http://twitter.com/statuses/update.xml';
    $body = array( 'status' => $message );
    $headers = array( 'Authorization' => 'Basic '.base64_encode("$username:$password") );
    $request = new WP_Http;
    $result = $request->request( $api_url , array( 'method' => 'POST', 'body' => $body, 'headers' => $headers ) );

    翻譯自 How To Make HTTP Requests with WordPress

    WordPress 加入 WP_Http 類之後,就放棄了 Snoopy 這個 PHP Class,所以建議大家給 WordPress 寫插件的時候,盡量使用 WP_Http 來做 HTTP 請求。

    WordPress 已經可以認為是 PHP 框架了,它含有各種類和方法,並且接口和方法使用非常簡單,並且文檔化,所以使用 WordPress 作為 PHP 框架進行開發,或者抽取 WordPress 中的一些類進行開發會起到事半功倍的效果。

    原文︰http://fairyfish.net/2009/08/22/how-to-make-http-requests-with-wordpress/

    需求留言
    您的姓名︰

    您的電話︰

    電子郵箱︰

    標題︰

    描述︰