程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php中CURL實現模擬登錄並采集數據

php中CURL實現模擬登錄並采集數據

編輯:關於PHP編程

在php中采集我們用的是簡單的采集方式(例如file_get_contents)就無法做到了,但是如果想模擬登錄用戶並采集利用它就沒辦法了,我們可利用CURL函數來實現模擬登錄並采集數據

這裡要說一些,默認情況下,PHP的CURL功能是沒有開啟的,所以你要自己去開啟這個功能,需要在php.ini中把  ;extension= php_curl.dll 前面的  " ; " 號去掉!!!
  好,我講講昨天晚上的程序吧,雖然最後沒有成功,但是還是學習到一些東西的。
 

 代碼如下 復制代碼

$login="http://www.phpyu.com/index.php?action=login";
$post_file="user=××&pw=××";
$cookie_file    =    tempnam('./temp','cookie'); 

/////創建一個具有唯一文件名的臨時文件。 若成功,則該函數返回新的臨時文件名。若失敗,則返回 false。

 代碼如下 復制代碼

$ch=curl_init($login_url); /////初始化一個CURL對象
curl_setopt($ch,CURLOPT_HEADER,0);

  //如果你想把一個頭包含在輸出中,設置這個選項為一個非零值。

 代碼如下 復制代碼

curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); ///設置不輸出在浏覽器上
curl_setopt($ch,CURLOPT_POST,1);

 /////如果你想PHP去做一個正規的HTTP POST,設置這個選  項為一個非零值。這個POST是普通的 application/x-www-from-urlencoded 類型,多數被HTML表單使用。

 代碼如下 復制代碼

curl_setopt($ch,CURLOPT_POSTFIELDS,$post_file);  ////傳遞一個作為HTTP "POST"操作的所有數據的字符串。
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);  /////把返回來的cookie信息保存在$cookie_jar文件中
curl_exec($ch);///執行
curl_close($ch);////關閉


上面已經完成了模擬登錄的過程
 

下面要做的就是進入具有權限的頁面了,要記得你現在已經登錄了,你應該把登錄的憑證cookie保存了起來。

 代碼如下 復制代碼

$url="http://www.phpyu.com/admin/××";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);

////把這個頁面顯示在浏覽器上,這裡要特別注意!!就是如果把它顯示在浏覽器上的時候 下面的$contents 就會變成 一個布爾類型 true

 代碼如下 復制代碼

curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
$contents = curl_exec($ch);

例2

 代碼如下 復制代碼

<?php
        $cookie_path = './'; //設置cookie保存路徑


        //-----登錄要提交的表單數據---------------
        $vars['username'] = '張三';
         $vars['pwd'] = '123';
         //-------------------------------------
        $method_post = true;
        //登錄提交的url地址(表單中的action的絕對地址)
         $url = 'http://****.com/login';
        //----------------------------


         $ch = curl_init();
        $params[CURLOPT_URL] = $url;    //請求url地址
        $params[CURLOPT_HEADER] = true; //是否返回響應頭信息
        $params[CURLOPT_RETURNTRANSFER] = true; //是否將結果返回
        $params[CURLOPT_FOLLOWLOCATION] = true; //是否重定向
        $params[CURLOPT_USERAGENT] = 'Mozilla/5.0 (Windows NT 5.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1';
   
        $postfields = '';
        foreach ($vars as $key => $value){
            $postfields .= urlencode($key) . '=' . urlencode($value) . '&'; 
        }
       
        $params[CURLOPT_POST] = true;
        $params[CURLOPT_POSTFIELDS] = $postfields;
       
        //判斷是否有cookie,有的話直接使用
        if (isset($_COOKIE['cookie_jar']) && ($_COOKIE['cookie_jar'] || is_file($_COOKIE['cookie_jar'])))
        {
            $params[CURLOPT_COOKIEFILE] = $_COOKIE['cookie_jar']; //這裡判斷cookie
        }
        else
        {
            $cookie_jar = tempnam($cookie_path, 'cookie'); //產生一個cookie文件
            $params[CURLOPT_COOKIEJAR] = $cookie_jar; //寫入cookie信息
            setcookie('cookie_jar', $cookie_jar); //保存cookie路徑
        }
        curl_setopt_array($ch, $params); //傳入curl參數
        $content = curl_exec($ch); //執行


        echo '
';        echo $content; //輸出登錄結果
        /*
        //---------登錄成功後再次請求其他地址,如果有多個可以循環執行---------
        echo '
--------------------------------------------------------------------------------
 ';
        $nexturl = 'http://****.com/test';
        $params[CURLOPT_URL] = $nexturl;
        $params[CURLOPT_POSTFIELDS] = '';
        curl_setopt_array($ch, $params); //傳入curl參數
        $content = curl_exec($ch); //執行
        echo $content; //輸出請求結果
        //-------------------------------------------------
        */
        curl_close($ch); //關閉連接
       
?>

注:如果遇到無法請求https站點的情況,可能是因為無法驗證證書或者域名,只要在curl_setopt_array前增加以下兩項就可以了:

 代碼如下 復制代碼

$params[CURLOPT_SSL_VERIFYPEER] = false;

$params[CURLOPT_SSL_VERIFYHOST] = false;


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved