1. 程式人生 > >PHP CURL模擬登陸

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); //儲存抓取的頁面內容