在PHP中發(fā)起HTTP請求并不是很難,有很多種方法:使用fopen() 函數(shù),使用cURL 擴展,使用文件操作函數(shù)如fsockopen() 和fwrite()等,但是問題是各種方法所依賴的服務器的配置把不同,有些服務器可能無法支持,不過WordPress自身開發(fā)了新的API WP_Http使得WordPress在所有環(huán)境下都非常容易發(fā)起HTTP Request。
PHP類:WP_Http
WordPress 2.7開始引入了一個新的PHP Class:WP_Http(在wp-includes目錄http.php文件中)。這個Class的強大之處是它會檢測服務器的情況,選擇最好的方法去實現(xiàn)HTTP請求,所以我們自己無須去檢測HTTP擴展,fopen(),是否存在curl_init()函數(shù),這個Class都會包辦這些檢測。
這個Class的基本使用方法如下:
$request = new WP_Http;$result = $request->request( 'http://blog.wpjam.com/' );
返回的變量$result是一個數(shù)組,它包含以下東西:
下面是具體的例子:
簡單的GET請求
假設你想在一些RESTFul的API搜索所有含有你ID的信息:
$url = 'http://your.api.url/?q=@denishua';$request = new WP_Http;$result = $request->request( $url );$json = $result['body'];
接下來就是 JSON 解碼的事情了。
基本的POST請求
如過你需要傳遞一些參數(shù),如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請求
假如你想在一些RESTFul的API提交一些信息,你首先需要進行驗證,我們需要發(fā)送一個含有用戶名和密碼對的base64編碼的字符串給API,詳細如下:
// You would edit the following:$username = 'denishua'; // login$password = '123456'; // password$message = "I'm posting with the API";// Now, the HTTP request:$api_url = 'http://your.api.url/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已經(jīng)可以認為是PHP框架了,它含有各種類和方法,并且接口和方法使用非常簡單,并且文檔化,所以使用WordPress作為PHP框架進行開發(fā),或者抽取WordPress中的一些類進行開發(fā)會起到事半功倍的效果。
|
新聞熱點
疑難解答
圖片精選