curl算是寫蜘蛛必備的東西,可以很快速的去取得各項資訊
在php中使用curl並不難,
以GET來說,直接把參數填在URL即可
//init curl
$ch = curl_init();
//curl_setopt可以設定curl參數
//設定url
curl_setopt($ch , CURLOPT_URL , "http://www.test.com.tw?name=johnson");
//設定AGENT
curl_setopt($ch, CURLOPT_USERAGENT, "Google Bot");
//執行,並將結果存回
$result = curl_exec($ch);
//關閉連線
curl_close($ch);
若是要使用POST則必需開啟post參數
//init curl
$ch = curl_init();
//curl_setopt可以設定curl參數
//設定url
curl_setopt($ch , CURLOPT_URL , "http://www.test.com.tw");
//設定header
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/x-www-form-urlencoded'));
//啟用POST
curl_setopt($ch, CURLOPT_POST, true);
//傳入POST參數
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query( array( "name"=>"johnson") ));
//執行,並將結果存回
$result = curl_exec($ch);
//關閉連線
curl_close($ch);
利用curl下載檔案:
//設定路徑
$path = "/home/johnson4932/code/work.doc";
$ch = curl_init();
//CURLOPT_RETURNTRANSFER為true的話,curl只會將結果傳回,並不會輸出在畫面上
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch , CURLOPT_URL , "http://www.test.com.tw/files/stuwork.doc");
$result = curl_exec($ch);
curl_close($ch);
//利用file_put_contents將檔案的資料存到設定的路徑及檔案之中
file_put_contents($path, $result);
/*************
或者直接寫入檔案之中
*************/
$ch = curl_init();
curl_setopt($ch , CURLOPT_URL , "http://www.test.com");
//開啟檔案
$fp = fopen("example_file", "w");
//CURLOPT_FILE設為開啟的檔案
curl_setopt($ch, CURLOPT_FILE, $fp);
//執行,直接寫入檔案
curl_exec($ch);
顯示Header資訊(含目地端的資料)
$ch = curl_init();
//顯示Http Header資訊
curl_setopt($ch , CURLOPT_HEADER, true);
curl_setopt($ch , CURLOPT_URL , "http://www.test.com.tw");
$result = curl_exec($ch);
curl_close($ch);
只顯示Header資訊
$ch = curl_init();
//顯示Http Header資訊
curl_setopt($ch , CURLOPT_HEADER, true);
//不要顯示目地端的資料
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch , CURLOPT_URL , "http://www.test.com.tw");
$result = curl_exec($ch);
curl_close($ch);
利用curl_setopt_array()一次處理
$ch = curl_init();
$options = array(CURLOPT_URL => "http://test.com",
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query( array( "name"=>"johnson"))
);
curl_setopt_array($ch,$options);
$result = curl_exec($ch);
curl_close($ch);
curl上傳檔案
$path = realpath('./fallzu.jpg');
$post = array('name' => 'JohnsonLu','file_contents'=>'@'.$path);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"UPLOAD_URL");
curl_setopt($ch, CURLOPT_POST, true);
//這裡不需要使用http_build_query
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$result = curl_exec ($ch); curl_close ($ch);
curl使用cookie
//cookie存放路徑
$ckfile = "/tmp/cookie_file";
//利用CURLOPT_COOKIEJAR參數存放cookie
$ch = curl_init ("http://www.test.com.tw");
curl_setopt($ch, CURLOPT_COOKIEJAR, $ckfile);
$output = curl_exec ($ch);
//利用CURLOPT_COOKIEFILE取得cookie
$ch = curl_init ("http://www.test.com.tw");
curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile);
$output = curl_exec ($ch);
注意:從A.php利用curl去執行B.php所產生的session是不相同的(A和B互相抓不到session)
curl取得https網站內容
$ch = curl_init ("https://www.test.com.tw");
//信任認為認證
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
//加入User Agent 模擬browser行為
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0");
$output = curl_exec ($ch);
curl常用option
$options = array(
CURLOPT_URL => $url, //網址
CURLOPT_POST => true, //開啟POST
CURLOPT_POSTFIELDS => http_build_query($params), //POST參數
CURLOPT_FOLLOWLOCATION => true, //是否要抓取轉址
CURLOPT_RETURNTRANSFER => true, //只傳回結果,不輸出在畫面上
CURLOPT_HEADER => true, //顯示HEADER資訊
CURLOPT_USERAGENT => "Google Bot", //設定AGENT
CURLOPT_FILE => fopen("file","w"), //設定檔案(將結果輸入到檔案之中)
CURLOPT_NOBODY => true, //不要顯示目的端資料
);