引言:繼前文《模擬登陸並採集數據》,你們彷佛看不過癮,這會再出一發,模擬實現帶驗證碼網站的登陸。php
這篇文章主要介紹了PHP使用CURL實現對帶有驗證碼的網站進行模擬登陸的方法,能夠幫助讀者加深對CURL操做的理解與應用,須要的朋友能夠參考下。html
網上的不少模擬登陸程序,大都是經過服務程序Apache之類的運行,獲取到驗證碼以後顯示在網頁上,而後填上再POST出去,這樣雖然看起來很友好,可是既然模擬登陸,登陸後所幹的事情就不必定是短期完成的,因此這就要受到php最大執行時間的限制,並且有些操做還有可能權限不足。瀏覽器
本文提供了一個程序實例,思路就是獲取到驗證碼以後把驗證碼存儲爲一個圖片,而後程序休眠20秒,在20秒以內由用戶手動查看圖片,並把驗證碼填寫到code.txt文件中,20秒休眠完成後,程序會讀code.txt的驗證碼,這樣再帶着驗證碼進行登陸操做。cookie
簡單,噁心,粗魯,粗暴……。curl
切入主題網站
下面直接上高清代碼,:)。url
/////////////// // 初始化變量 /////////////// // Cookie文件名稱 $cookie_file = "tmp.cookie"; // 驗證碼文件名稱 $vcode_file = "code.txt"; // 登陸網址 $login_url = "http://xxx.com/logon.php"; // 驗證碼網址 $vcode_url = "http://xxx.com/verifyCode.php"; echo "===================================\n"; echo "正在獲取COOKIE... \n"; echo "===================================\n"; // 初始化CURL對象 $ch = curl_init(); // 設置請求URL curl_setopt($ch, CURLOPT_URL, $login_url); // 設置不輸出到瀏覽器(說明:直接返回字符串,不然直接輸出) curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 設置鏈接超時時間(說明:5秒) curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); // 設置Cookie保存文件(說明:把返回來的cookie信息保存在$cookie_file文件中) curl_setopt($ch,CURLOPT_COOKIEJAR, $cookie_file); // 執行請求 $contents = curl_exec($ch); // 關閉鏈接 curl_close($ch); echo "===================================\n"; echo "COOKIE獲取完成,正在取驗證碼... \n"; echo "===================================\n"; // 初始化CURL對象 $ch = curl_init(); // 設置請求URL curl_setopt($ch, CURLOPT_URL, $vcode_url); // 設置Cookie使用文件(說明:使用指定路徑下的cookie文件,並跟隨請求傳遞) curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); // 設置返回響應頭信息[無](說明:該設置一般是須要加上的,用於製做下一次請求的肥料。) curl_setopt($ch, CURLOPT_HEADER, 0); // 設置不輸出到瀏覽器(說明:直接返回字符串,不然直接輸出) curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 執行請求(說明:得到圖片字符集) $img = curl_exec($ch); // 關閉鏈接 curl_close($ch); echo "===================================\n"; echo "正在保存驗證碼圖片... \n"; echo "===================================\n"; $fp = fopen("verifyCode.jpg", "w"); fwrite($fp, $img); fclose($fp); echo "===================================\n"; echo "驗證碼取出完成,正在休眠... \n"; echo "20秒內請把驗證碼填入code.txt並保存.\n"; echo "===================================\n"; // 線程睡眠20秒 sleep(20); echo "===================================\n"; echo "休眠完成,開始取驗證碼... \n"; echo "===================================\n"; $code = file_get_contents(vcode_file); echo "驗證碼成功取出:$code\n"; echo "===================================\n"; echo "正在準備模擬登陸... \n"; echo "正在準備模擬登陸... \n"; echo "===================================\n"; // 初始化CURL對象 $ch = curl_init(); // 設置請求URL curl_setopt($ch, CURLOPT_URL, $url); // 設置返回響應頭信息[無](說明:該設置一般是須要加上的,用於製做下一次請求的肥料。) curl_setopt($ch, CURLOPT_HEADER, false); // 設置不輸出到瀏覽器(說明:直接返回字符串,不然直接輸出) curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 設置請求攜帶數據 curl_setopt($ch, CURLOPT_POSTFIELDS, "username=superdo&pwd=do.org.cn&verifycode=$code"); // 設置Cookie使用文件(說明:使用指定路徑下的cookie文件,並跟隨請求傳遞) curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); // 執行請求 $result = curl_exec($ch); // 關閉鏈接 curl_close($ch); // 這一塊根據本身抓包獲取到的網站上的數據來作判斷 if (substr_count($result, "登陸成功")) { echo "登陸成功\n"; } else { echo "登陸失敗\n"; exit; } // OK,開始作你想作的事吧。。。。。
未完待續……。spa
本站文章爲 寶寶巴士 SD.Team 原創,轉載務必在明顯處註明:(做者官方網站: 寶寶巴士 )
轉載自【寶寶巴士SuperDo團隊】 原文連接: http://www.cnblogs.com/superdo/p/4791957.html線程