- 目錄
- 1.前言
- 2.使用前準備
- 3.CURL實戰
- 3.1抓取頁面
- 3.2替換頁面信息
- 3.3調用WebService獲取天氣
- 4. 封裝CURL的API調用類
- 4.1 get方法獲取接口數據
- 4.2 post方法獲取接口數據
- 4.3 put方法獲取接口數據
- 4.4 del方法獲取接口數據
- 4.5 patch方法獲取接口數據
- 5.總結
1.前言
curl就是利用URL語法在命令行方式下工作的開源文件傳輸工具,我們能夠通過CURL從互聯網上獲得各種各樣的網絡資源。下面我們一起學習一下。
2.使用前準備
打開php.ini
查詢curl模塊有沒有打開。
extension=php_curl.dll
3.CURL實戰
3.1抓取頁面
<?php $ch = curl_init(); //初始化,創建一個新cURL資源 curl_setopt($ch, CURLOPT_URL, "http://www.baidu.com/");//設置URL和相應的選項 curl_setopt($ch, CURLOPT_HEADER, 0); curl_exec($ch); curl_close($ch); //關閉cURL資源,並且釋放系統資源 ?>
3.2替換頁面信息
<?php $curlobj = curl_init();// 初始化 curl_setopt($curlobj, CURLOPT_URL, "http://www.baidu.com"); // 設置訪問網頁的URL curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, true); // 將curl_exec()獲取的信息以文件流的形式返回,而不是直接輸出。 $output=curl_exec($curlobj); curl_close($curlobj); echo str_replace("百度","php",$output); ?>
3.3調用WebService獲取天氣
<?php header("Content-Type:text/html; charset=utf-8"); $data = 'theCityName=東莞'; $url = 'http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName'; $headerArray = array("application/x-www-form-urlencoded;charset=utf-8", "Content-length: ".strlen($data)); $userAgent = "user-agent:Mozilla/5.0 (Windows NT 5.1; rv:24.0) Gecko/20100101 Firefox/24.0"; $curlobj = curl_init(); curl_setopt($curlobj,CURLOPT_URL, $url); curl_setopt($curlobj, CURLOPT_USERAGENT, $userAgent);//僞造瀏覽器信息 curl_setopt($curlobj, CURLOPT_HEADER, 0);//啓用時會將頭文件的信息作爲數據流輸出。這裏不啓用 curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, 1);//如果成功只將結果返回,不自動輸出任何內容。如果失敗返回FALSE curl_setopt($curlobj, CURLOPT_POST, 1);//如果你想PHP去做一個正規的HTTP POST,設置這個選項爲一個非零值。這個POST是普通的 application/x-www-from-urlencoded 類型,多數被HTML表單使用。 curl_setopt($curlobj, CURLOPT_POSTFIELDS, $data);//需要POST的數據 curl_setopt($curlobj,CURLOPT_HTTPHEADER, $headerArray); $rtn = curl_exec($curlobj); if(!curl_errno($curlobj)){ $info = curl_getinfo($curlobj); print_r($info); } else { echo 'Curl error: ' . curl_error($curlobj); } curl_close($curlobj); ?>
其中curl_getinfo()函數獲取CURL請求輸出的相關信息,返回的是一個關聯數組,包含以下數據:
- url:網絡地址。
- content_type:內容編碼。
- http_code:HTTP狀態碼。
- header_size:header的大小。
- request_size:請求的大小。
- filetime:文件創建的時間。
- ssl_verify_result:SSL驗證結果。
- redirect_count:跳轉計數。
- total_time:總耗時。
- namelookup_time:DNS查詢耗時。
- connect_time:等待連接耗時。
- pretransfer_time:傳輸前準備耗時。
- size_uplpad:上傳數據的大小。
- size_download:下載數據的大小。
- speed_download:下載速度。
- speed_upload:上傳速度。
- download_content_length:下載內容的長度。
- upload_content_length:上傳內容的長度。
- starttransfer_time:開始傳輸的時間表。
- redirect_time:重定向耗時。
4.封裝CURL的API調用類
4.1get方法獲取接口數據
/**
* 通過get方法獲取接口數據
* @param $url
* @return mixed
*/
public function getUrl($url)
{
$headerArray = array("Content-type:application/json;", "Accept:application/json");
$ch = curl_init();// 初始化一個cURL會話。
curl_setopt($ch, CURLOPT_URL, $url);//需要獲取的URL地址,也可以在curl_init()函數中設置。
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);//禁用cURL後從服務端進行驗證。
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);//禁止檢查服務器SSL證書
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//將curl_exec()獲取的信息以文件流的形式返回,而不是直接輸出。
curl_setopt($ch, CURLOPT_HTTPHEADER, $headerArray);//設置HTTP頭字段的數組
$output = curl_exec($ch);// 執行一個cURL會話
curl_close($ch);
$output = json_decode($output, true);
return $output;
}
4.2 post方法獲取接口數據
/**
* 通過post方法獲取接口數據
* @param $url
* @param $data
* @return mixed
*/
public function postUrl($url, $data)
{
$data = json_encode($data);
$headerArray = array("Content-type:application/json;charset='utf-8'", "Accept:application/json");
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl, CURLOPT_POST, 1);// 啓用時會發送一個常規的POST請求,類型爲:application/x-www-form-urlencoded,就像表單提交的一樣。
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);//全部數據使用HTTP協議中的"POST"操作來發送。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headerArray);
$output = curl_exec($curl);
curl_close($curl);
return json_decode($output, true);
}
4.3 put方法獲取接口數據
/**
* 通過put方法獲取接口數據
* @param $url
* @param $data
* @return mixed
*/
public function putUrl($url, $data)
{
$data = json_encode($data);
$headerArray = array('Content-type:application/json');
$ch = curl_init(); //初始化CURL句柄
curl_setopt($ch, CURLOPT_URL, $url); //設置請求的URL
curl_setopt($ch, CURLOPT_HTTPHEADER, $headerArray);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //設爲TRUE把curl_exec()結果轉化爲字串,而不是直接輸出
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); //設置請求方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);//設置提交的字符串
$output = curl_exec($ch);
curl_close($ch);
return json_decode($output, true);
}
4.4 del方法獲取接口數據
/**
* 通過del方法獲取接口數據
* @param $url
* @param $data
* @return mixed
*/
public function delUrl($url, $data)
{
$data = json_encode($data);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type:application/json'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$output = curl_exec($ch);
curl_close($ch);
$output = json_decode($output, true);
}
4.5 patch方法獲取接口數據
/**
* 通過patch方法獲取接口數據
* @param $url
* @param $data
* @return mixed
*/
public function patchUrl($url, $data)
{
$data = json_encode($data);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type:application/json'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PATCH");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$output = curl_exec($ch);
curl_close($ch);
$output = json_decode($output);
return $output;
}
5.總結
通過上述學習回顧,我們對CURL有了基本的認識和掌握,能夠使用CURL抓取頁面、替換頁面信息、調用WebService獲取天氣以及封裝了CURL獲取API接口的調用類,其中包含get、post、put、del、patch等基本API方法,希望通過本次學習,加強對CURL的理解和以後的實踐應用。