PHP CURL模擬登陸
通過CURL模擬登入並獲取資料,一些網站需要許可權認證,必須登入網站後,才能有效地抓取網頁並採集內容,這就需要curl來設定cookie完成模擬登入網頁,php的curl在抓取網頁內容方面效率是比較高的,而且支援多執行緒,而file_get_contents()效率就要稍低些。
模擬登入的程式碼如下所示:
<?php
/*
函式login_post(),需要提供一個url地址,一個儲存cookie文
件,以及post的資料(使用者名稱和密碼等資訊),注意php自帶的http_build_query()
函式可以將陣列轉換成相連線的字串,如果通過該函式登入成功後,我們要獲取
登入成功個頁面資訊。宣告函式的程式碼如下所示:
*/
function login_post($url, $cookie, $post){
$ch = curl_init(); //初始化curl模組
curl_setopt($ch, CURLOPT_URL, $url); //登入提交的地址
curl_setopt($ch, CURLOPT_HEADER, 0); //是否顯示頭資訊
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0); //是否自動顯示返回的資訊
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie); //設定cookie資訊儲存在指定的資料夾中
curl_setopt($ch, CURLOPT_POST, 1); //以POST方式提交
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));//要執行的資訊
curl_exec($ch); //執行CURL
curl_close($ch);
}
/*
get_content()中用curlopt_cookiefile可以讀取到登入儲存的cookie信
息 最後講頁面內容返回.我們的目的是獲取到模擬登入後的資訊,也就是
只有正常登入成功後菜能獲取的有用的資訊,下面舉例程式碼
*/
function get_content($url, $cookie){
$ch = curl_init(); //初始化curl模組
curl_setopt($ch, CURLOPT_URL, $url); //登入提交的地址
curl_setopt($ch, CURLOPT_HEADER, 0); //是否顯示頭資訊
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //是否自動顯示返回的資訊
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);//設定cookie資訊儲存在指定的資料夾中
$rs = curl_exec($ch); //執行curl轉去頁面內容
curl_close($ch);
return $rs; //返回字串
}
// 模擬登陸測試程式碼
$post = array(
'username' => 'admin',
'password' => '123456',
'_submit' => '登入'
);
$url = "http://www.ceshi.com/login.php"; //登入地址, 和原網站一致
$cookie = dirname(__FILE__).'/cookie_ydma.txt'; //設定cookie儲存的路徑
$url2 = "http://www.ceshi.com/order.php"; //登入後要獲取資訊的地址
login_post($url, $cookie, $post); //呼叫模擬登入
$content = get_content($url2, $cookie); //登入後,呼叫get_content()函式獲取登入後指定的頁面資訊
// @unlik($cookie); //刪除cookie檔案
file_put_contents('save.txt', $content); //儲存抓取的頁面內容