2022年7月6日 星期三

PHP curl

 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);
$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);
$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, //不要顯示目的端資料
);

資料來源:https://blog.johnsonlu.org/php-curl/

沒有留言: