PHP之curl
當我第一次接觸curl的時候,看文檔,以及網上search各種資料,官方(http://cn2.php.net/manual/en/intro.curl.php)的解釋是,這是某大牛寫的一個libcurl庫,PHP支持該擴展庫,允許我們以各種不同的協議(http、https、ftp、telnet、file...)訪問各種不同的服務器,支持post、put、ftp或基於表單的文件上傳,支持cookie、代理等等。
好像還是似懂非懂,我覺得最簡單的解釋是,curl是一個工具集,由libcurl擴展庫支持,包含一些函數,使用這些函數可以模擬我們來訪問某些地址,也就是,我們手動在浏覽器地址欄裡面輸入http://www.baidu.com,來訪問百度,curl就可以代替這種手動操作,以程序的形式來實現這一過程,這個操作、過程得到的結果,是浏覽器給了我們一個百度搜索的首頁。
既然curl是一個工具集,有很多函數可供調用,可以想象成,在地址欄輸入URL(可能會帶一些參數),當輸入完點擊回車的時候,相當於調用了某些函數,這些函數在百度某台或某幾台服務器上的腳本上寫著,函數運行完後會有某種效果,比如返回了值,或者沒返回值,或者打印了一些東西,在這裡呈現了一個頁面給你,而curl能實現的功能,比簡單展示一個頁面多得多,這些各自不同的功能是通過curl_setopt函數來實現的。比如在接SDK的時候,別人提供的是訪問地址形式的API,這時curl就大顯身手。
1.get實現
復制代碼
<?php
$url = 'http://www.somesite.com';
$data = array('username'=>'Peter', 'password'=>12345);
function get($url, $data = array()){
$ch = curl_init(); // 初始化一個curl資源類型變量
/*設置訪問的選項*/
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // 啟用時會將服務器服務器返回的Location: 放在header中遞歸的返回給服務器
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true ); // 將獲得的數據返回而不是直接在頁面上輸出
curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_HTTP ); // 設置訪問地址用的協議類型為HTTP
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15); // 訪問的超時時間限制為15s
$url = url.'?'.http_build_query($data);
curl_setopt($ch, CURLOPT_URL, $url); // 設置即將訪問的URL
$result = curl_exec($ch); // 執行本次訪問,返回一個結果
// ... // 針對結果的正確與否做一些操作
return $result;
}
// $result = get(%url, $data); // 調用
復制代碼
2.post實現
復制代碼
<?php
function post($url, $data = array()){
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, true); // 設置為post傳遞形式
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // 設置post傳遞的數據
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 設置數據以文件流的形式返回
curl_setopt($ch, CURLOPT_USERAGENT, ''); // 將用戶代理置空
curl_setopt($ch, CURLOPT_HEADER, false); // 設置不顯示頭信息
$result = curl_exec($ch);
$info = curl_getinfo($ch); // 獲取本次訪問資源的相關信息
return $result;
}