PHP cURL工具的簡單介紹

jopen 10年前發布 | 59K 次閱讀 PHP開發 curl

cURL通常是指使用URL語法進行數據傳遞的命令行工具和庫,本文所介紹的是其PHP拓展最基本的使用。

 

cURL主要用來進行數據抓取,當然,還有更多強大的功能,一些復雜的操作,例如處理Cookie、表單數據提交等實現起來也要比其他方法簡單。

 

1.安裝與使用

Windows下:修改php.ini的設置,打開php_curl.dll拓展即可。

 

Linux下: # wget http://curl.haxx.se/download/curl-7.17.1.tar.gz

# tar zxvf curl-7.17.1.tar.gz  //解壓

#cd curl-7.17.1

# ./configure --prefix=/usr/local/curl

# make

# make install

安裝完成后通過phpinfo()來查看是否安裝成功。

ps:如果是用的集成包來搭建PHP環境的話,一般而言cURL的功能都是開啟的。

 

 

2.用cURL抓取網頁的基本流程

最基本的抓取網頁的步奏主要分為以下幾步:

(1)初始化

(2)設置相關選項

(3)執行獲取網頁文檔

(4)釋放cURL句柄

例如:我們以抓取百度首頁為例,代碼示范這個流程:

<?php
//初始化一個curl句柄
$ch = curl_init();
//對相關選項進行設置
curl_setopt($ch,CURLOPT_URL,'www.baidu.com');
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
//執行抓取
$output = curl_exec($ch);
//釋放curl句柄
curl_close($ch);
//輸出抓取的數據
echo $output;
?>

在整個流程中,比較重要的步奏其實在于選項設置部分,即curl_setopt()函數,來指定URL請求的細節,具體設置選項的意義在后面介紹。

 

為了使上述代碼具有可調試性,現在增加幾行代碼,來輸出cURL執行后的相關信息。

<?php
......
curl_exec($ch);
//獲取執行請求后相關信息
$info = curl_getinfo($ch);
print_r($info);//打印信息數組
?>

對于抓取百度首頁,打印出的信息數組如下:

Array
(
[url] => HTTP://www.baidu.com/  
[content_type] => text/html     
[http_code] => 200
[header_size] => 689
[request_size] => 52
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 0.016
[namelookup_time] => 0
[connect_time] => 0
[pretransfer_time] => 0
[size_upload] => 0
[size_download] => 14613
[speed_download] => 913312
[speed_upload] => 0
[download_content_length] => 14613
[upload_content_length] => 0
[starttransfer_time] => 0.016
[redirect_time] => 0
[redirect_url] => 
.........
)

其中,可以通過size_download字段信息來校驗下載的信息是否完整:

對抓取的數據的filesize進行大小計算,來對比返回信息中size_download字段。

<?php
......
file_put_contents("D:/temp/test.html", $output);
$size = filesize('D:/temp/test.html');
if($size==$info['size_download'])
{
echo 'success';
}
else
{
echo 'fail';
}
?>

 

 

3.用cURL偽造頭信息

有些網站只允許手機端訪問,例如騰訊的手機網(3g.qq.com),當用瀏覽器直接輸入地址訪問時,會跳轉到http://3gqq.qq.com/,這是因為騰訊會識別訪問該網址的UA(User Agent),來判斷用戶所使用的設備,進而進行相應的跳轉,所以可以用cURL模擬手機UA來訪問。

在選項設置中添加:

curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/5.0 (Linux; U; Android 4.1.1; zh-cn; MI 2S Build/JRO03L) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 XiaoMi/MiuiBrowser/1.0");

來模擬安卓手機登陸訪問。

返回的數據截圖:

        PHP cURL工具的簡單介紹

很顯然,是手機網頁。

 

 

4.cURL POST發送數據

有的網頁通過form表單向服務器提交數據,當提交的method設置為post時候,我們也可以用cURL來進行提交。例如:

 

<?php
//初始化一個curl句柄
$ch = curl_init();
$postdata = array('name'=>'dog','age'=>'999','address'=>'china');
//對相關選項進行設置
curl_setopt($ch,CURLOPT_URL,'http://localhost/form.php');
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
//設置post選項
curl_setopt($ch, CURLOPT_POST, 1);
//綁定post變量
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
//執行
$output = curl_exec($ch);
//釋放curl句柄
curl_close($ch);
echo $output;
?>

 

其中,form.php腳本將提交的form數據進行打印輸出。

執行腳本后輸入如下:

Array ( [name] => dog [age] => 999 [address] => china )

也可以用這個方法向某些安全性較差的網站、留言板進行數據提交或者制作一個灌水機器人。

 

5.cURL相關設置項

前面曾經說過,cURL中靈魂性的東西就是選項設置,通過設置各種選項來指定cURL的細節。選項過多,不一一羅列,可以參考這里

來自:http://my.oschina.net/u/1472370/blog/334896

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!