国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

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

2024-05-04 21:48:36
字體:
來源:轉載
供稿:網友

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

這里要說一些,默認情況下,PHP的CURL功能是沒有開啟的,所以你要自己去開啟這個功能,需要在php.ini中把 ;extension= php_curl.dll 前面的  " ; " 號去掉!!!

我講講昨天晚上的程序吧,雖然最后沒有成功,但是還是學習到一些東西的,代碼如下:

  1. $login="http://www.survivalescaperooms.com/index.php?action=login"
  2. $post_file="user=××&pw=××"
  3. $cookie_file    =    tempnam('./temp','cookie');  
  4.  
  5. //創建一個具有唯一文件名的臨時文件,若成功,則該函數返回新的臨時文件名,若失敗,則返回 false,代碼如下: 
  6. $ch=curl_init($login_url); /////初始化一個CURL對象 
  7. curl_setopt($ch,CURLOPT_HEADER,0); 
  8. //開源代碼Vevb.com 
  9.  
  10. //如果你想把一個頭包含在輸出中,設置這個選項為一個非零值。 
  11.  
  12. curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); ///設置不輸出在瀏覽器上 
  13. curl_setopt($ch,CURLOPT_POST,1); 
  14.  
  15. //如果你想PHP去做一個正規的HTTP POST,設置這個選  項為一個非零值。這個POST是普通的 application/x-www-from-urlencoded 類型,多數被HTML表單使用。  
  16.  
  17. curl_setopt($ch,CURLOPT_POSTFIELDS,$post_file);  ////傳遞一個作為HTTP "POST"操作的所有數據的字符串。 
  18. curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);  /////把返回來的cookie信息保存在$cookie_jar文件中 
  19. curl_exec($ch);///執行 
  20. curl_close($ch);////關閉 

上面已經完成了模擬登錄的過程,下面要做的就是進入具有權限的頁面了,要記得你現在已經登錄了,你應該把登錄的憑證cookie保存了起來,代碼如下:

  1. $url="http://www.survivalescaperooms.com/admin/××"
  2. $ch = curl_init($url); 
  3. curl_setopt($ch, CURLOPT_HEADER, 0); 
  4. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0); 
  5.  
  6. //把這個頁面顯示在瀏覽器上,這里要特別注意!!就是如果把它顯示在瀏覽器上的時候 下面的$contents 就會變成 一個布爾類型 true 
  7.   
  8. curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); 
  9. $contents = curl_exec($ch); 

例2,代碼如下:

  1. <?php 
  2.         $cookie_path = './'//設置cookie保存路徑 
  3.  
  4.  
  5.         //-----登錄要提交的表單數據--------------- 
  6.         $vars['username'] = '張三'
  7.          $vars['pwd'] = '123'
  8.          //------------------------------------- 
  9.         $method_post = true; 
  10.         //登錄提交的url地址(表單中的action的絕對地址) 
  11.          $url = 'http://****.com/login'
  12.         //---------------------------- 
  13.  
  14.  
  15.          $ch = curl_init(); 
  16.         $params[CURLOPT_URL] = $url;    //請求url地址 
  17.         $params[CURLOPT_HEADER] = true; //是否返回響應頭信息 
  18.         $params[CURLOPT_RETURNTRANSFER] = true; //是否將結果返回 
  19.         $params[CURLOPT_FOLLOWLOCATION] = true; //是否重定向 
  20.         $params[CURLOPT_USERAGENT] = 'Mozilla/5.0 (Windows NT 5.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1'
  21.      
  22.         $postfields = ''
  23.         foreach ($vars as $key => $value){ 
  24.             $postfields .= urlencode($key) . '=' . urlencode($value) . '&';  
  25.         } 
  26.          
  27.         $params[CURLOPT_POST] = true; 
  28.         $params[CURLOPT_POSTFIELDS] = $postfields
  29.          
  30.         //判斷是否有cookie,有的話直接使用 
  31.         if (isset($_COOKIE['cookie_jar']) && ($_COOKIE['cookie_jar'] || is_file($_COOKIE['cookie_jar']))) 
  32.         { 
  33.             $params[CURLOPT_COOKIEFILE] = $_COOKIE['cookie_jar']; //這里判斷cookie 
  34.         } 
  35.         else 
  36.         { 
  37.             $cookie_jar = tempnam($cookie_path'cookie'); //產生一個cookie文件 
  38.             $params[CURLOPT_COOKIEJAR] = $cookie_jar//寫入cookie信息 
  39.             setcookie('cookie_jar'$cookie_jar); //保存cookie路徑 
  40.         } 
  41.         curl_setopt_array($ch$params); //傳入curl參數 
  42.         $content = curl_exec($ch); //執行 
  43.  
  44.  
  45.         echo ' 
  46. ';        echo $content//輸出登錄結果 
  47.         /* 
  48.         //---------登錄成功后再次請求其他地址,如果有多個可以循環執行--------- 
  49.         echo ' 
  50. -------------------------------------------------------------------------------- 
  51.  '; 
  52.         $nexturl = 'http://****.com/test'
  53.         $params[CURLOPT_URL] = $nexturl
  54.         $params[CURLOPT_POSTFIELDS] = ''
  55.         curl_setopt_array($ch$params); //傳入curl參數 
  56.         $content = curl_exec($ch); //執行 
  57.         echo $content//輸出請求結果 
  58.         //------------------------------------------------- 
  59.         */ 
  60.         curl_close($ch); //關閉連接 
  61.          
  62. ?> 

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

$params[CURLOPT_SSL_VERIFYPEER] = false;

$params[CURLOPT_SSL_VERIFYHOST] = false;

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 巴林左旗| 宜川县| 双江| 孙吴县| 巴马| 永靖县| 朝阳区| 涞水县| 册亨县| 班戈县| 石渠县| 囊谦县| 赤城县| 平阳县| 寻乌县| 斗六市| 安龙县| 鸡东县| 宁海县| 湾仔区| 石河子市| 镇雄县| 望城县| 嵊泗县| 延川县| 亚东县| 栾川县| 吴旗县| 阿克陶县| 马边| 揭西县| 永川市| 云南省| 海丰县| 遂宁市| 淮阳县| 伊吾县| 紫阳县| 四子王旗| 南阳市| 本溪市|