您好,登錄后才能下訂單哦!
這篇文章主要介紹“PHP curl怎么模擬登錄帶驗證碼的網(wǎng)站”,在日常操作中,相信很多人在PHP curl怎么模擬登錄帶驗證碼的網(wǎng)站問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”PHP curl怎么模擬登錄帶驗證碼的網(wǎng)站”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
需求是這樣的,需要登錄帶驗證碼的網(wǎng)站,獲取數(shù)據(jù),但是不可能人為一直去記錄數(shù)據(jù),想通過自動采集的方式進(jìn)行,如下是試驗出來的結(jié)果代碼!有需要的可以參考下!
<?php namespace Home\Controller; use Think\Controller; class LoginController extends Controller { protected $cookieName = array('cookie_verify', 'cookie_verify'); protected $cookiePath = '/cookie/'; protected $cookiePathFile = array(); public function index() { $this->display(); } public function _initialize(){ foreach($this->cookieName as $key => $name) { $this->cookiePathFile[] = ROOT_PATH . $this->cookiePath . $this->cookieName[$key] . '_xxx.txt'; } } /** * 登錄xxx */ public function xxxLogin() { $username = I('username'); $password = I('password'); $verifyCode = I('verify'); $loginData = array( '__VIEWSTATE' => '/wEPDwUKMTU0MzAzOTU4NmQYAQUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgEFDExvZ2luX1N1Ym1pdL/yae69NsY163G3yuP0lxjz8oXu', //不把參數(shù)補(bǔ)全可能會不被響應(yīng)哦 '__VIEWSTATEGENERATOR' => 'DC42DE27', 'txt_UserName' => $username, 'txt_PWD' => $password, 'txt_VerifyCode' => $verifyCode, 'SMONEY' => 'ABC', 'Login_Submit.x' => '52', 'Login_Submit.y' => '19', ); $getBack = $this->_cookieRequest('http://xxx.com/noLogin.aspx', $loginData); if(preg_match('/<div[^\<div]*?id\s*=\s*[\'\"]{1}div_msg[\'\"]{1}.*?>(.*?)<\/div>/s', $getBack, $match)){ echo 'matched\r\n'; print_r($match); }else{ echo $getBack, '<br />'; $paramsFull = parse_url($getBack); parse_str($paramsFull['query'], $paramsFull['parsedQuery']); if(!empty($paramsFull['parsedQuery']['Warn'])) { $msg = "您好,歡迎來P,請先登錄。"; switch ($paramsFull['parsedQuery']['Warn']) { case '2': $msg = '您輸入的驗證碼錯誤,請重試'; break; case '3': $msg = '該帳號不存在,還沒帳號?'; break; case '5': $msg = '賬戶已注銷'; break; case '6': $msg = '密碼錯誤,如果連續(xù)錯誤3次半小時內(nèi)不能登錄!'; break; case '20': $msg = '今日密碼錯誤3次及以上,請于半小時后再來登錄!'; break; case '21': $msg = '今日您所在IP的所有帳號密碼錯誤9次以上,請于半小時后再來登錄!'; break; case '22': $msg = '登錄失敗,您所在IP今日登錄的帳號過多!'; break; case '23': $msg = '登錄失敗,驗證碼失效!'; break; case '32': $msg = '該帳號已經(jīng)綁定其他xx帳號!'; break; case '33': $msg = '一臺電腦一天只能注冊一個帳號!'; break; } $this->error($msg, '', 5); }else{ $_SESSION['user_id'] = '123456'; //登錄設(shè)置session $this->success('登錄P網(wǎng)站成功', U('Index/index'), 5); } } } /** * 獲取驗證碼 */ public function getVerifyCode() { $img = $this->_cookieRequest('http://xxx.com/VerifyCode_Login.aspx?id=' . rand(10000,999999), null, true, 1); echo $img; } /** * 刪除cookie */ public function clearCookie() { for($i = 0; $i <count($this->cookieName); $i++) { setcookie($this->cookieName[$i], '', time() - 3600); } // unlink($this->cookiePathFile); $this->success('清除cookie成功!'); } /** * 帶COOKIE的訪問curl * @param $url 訪問地址 * @param bool|array $data 傳遞的數(shù)據(jù) * @param bool $redirect 是否獲取重定向的地址 * @return mixed 地址或者返回內(nèi)容 */ public function _cookieRequest($url, $data = null, $redirect = false, $cookieNum = 0) { $ch = curl_init(); $params[CURLOPT_URL] = $url; //請求url地址 $params[CURLOPT_HEADER] = false; //是否返回響應(yīng)頭信息 $params[CURLOPT_RETURNTRANSFER] = true; //是否將結(jié)果返回 $params[CURLOPT_FOLLOWLOCATION] = true; //是否重定向 $params[CURLOPT_USERAGENT] = 'Mozilla/5.0 (Windows NT 5.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1'; if($data) { $params[CURLOPT_POST] = true; $params[CURLOPT_POSTFIELDS] = http_build_query($data); } //判斷是否有cookie,有的話直接使用 if (!empty($_COOKIE[$this->cookieName[$cookieNum]]) && is_file($this->cookiePathFile[$cookieNum])) { $params[CURLOPT_COOKIEFILE] = $this->cookiePathFile[$cookieNum]; //這里判斷cookie } else { // $cookie_jar = tempnam($cookie_path, 'cookie'); //產(chǎn)生一個cookie文件 $params[CURLOPT_COOKIEJAR] = $this->cookiePathFile[$cookieNum]; //寫入cookie信息 setcookie($this->cookieName[$cookieNum], $this->cookiePathFile[$cookieNum], time() + 120); //保存cookie路徑 } curl_setopt_array($ch, $params); //傳入curl參數(shù) $content = curl_exec($ch); $headers = curl_getinfo($ch); // echo $content; curl_close($ch); if ($url != $headers["url"] && $redirect == false) { return $headers["url"]; } return $content; } }
登錄以后,就可以使用帶cookie的訪問其他頁面了!
ps:php curl 登錄淘寶
提交上去后顯示為填寫驗證碼,登錄不上去
填寫驗證碼提交:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title></title> </head> <body> <iframe id='img' src="b.php" width="950" height="300" scrolling="No" frameborder="0"></iframe> <form action="tb.php" method="POST"> <textarea name="vv" cols="50" rows="10">umto=&action=Authenticator&event_submit_do_login=anything&from=tb&fc=default&style=default&css_style=&tid=XOR_1_000000000000000000000000000000_635045544 70A7C717F750278&support=000001&CtrlVersion=1,0,0,7&loginType=3&minititle=&minipara=&pstrong=&llnick=&sign=&need_sign=&isIgnore=&full_redirect=&popid=&callback=&guf=¬_duplite_str=&need_user_id=&poy=XOR_1_000000000000000000000000000000_625A424 A45137C6F7A7F0B786D08&gvfdcname=&gvfdcre=&from_encoding=&TPL_redirect_url=http:www.taobao.com&TPL_username=xxx&TPL_password=xxxx&need_check_code=&&TPL_checkcode=</textarea> <input type="submit" /> </form> </body> </html>
<?php session_start(); if(empty($_SESSION['cookie_jar'])) exit(); $cookie_jar=$_SESSION['cookie_jar']; $post_fields=$_POST["vv"]; $ch = curl_init('https://login.taobao.com/member/login.jhtml'); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; QQWubi 133; Embedded Web Browser from: http://bsalsa.com/; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Tablet PC 2.0; .NET4.0C; .NET4.0E; InfoPath.3; Media Center PC 6.0)"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar); $data = curl_exec($ch); curl_close($ch); echo $data;exit; $ch = curl_init('http://www.taobao.com'); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; QQWubi 133; Embedded Web Browser from: http://bsalsa.com/; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Tablet PC 2.0; .NET4.0C; .NET4.0E; InfoPath.3; Media Center PC 6.0)"); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_jar); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, TRUE); curl_exec($ch); curl_close($ch); ?>
提取驗證碼
<?php session_start(); $cookie_jar=tempnam("./temp/","cookie"); $_SESSION['cookie_jar']=$cookie_jar; $post_fields = "action=Authenticator&event_submit_do_login=anything&from=tb&fc=default&style=default&css_style=&tid=XOR_1_000000000000000000000000000000_635045544 70A7C717F750278&support=000001&CtrlVersion=1,0,0,7&loginType=3&minititle=&minipara=&pstrong=&llnick=&sign=&need_sign=&isIgnore=&full_redirect=&popid=&callback=&guf=¬_duplite_str=&need_user_id=&poy=XOR_1_000000000000000000000000000000_625A424A45137C6F7A7F0B786D08&gvfdcname=&gvfdcre=&from_encoding=&TPL_redirect_url=http:www.taobao.com&TPL_username=xxx&TPL_password=xxx"; $ch = curl_init('https://login.taobao.com/member/login.jhtml'); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; QQWubi 133; Embedded Web Browser from: http://bsalsa.com/; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Tablet PC 2.0; .NET4.0C; .NET4.0E; InfoPath.3; Media Center PC 6.0)"); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); $data = curl_exec($ch); curl_close($ch); preg_match("/id=\"um_to\" name=\"umto\" value=\"(.*?)\"\/>/", $data, $arr); $post_fields = "umto=" . $arr[1] . "&" . $post_fields."&TPL_checkcode="; echo "<textarea cols=50 rows=10>" . $post_fields . "</textarea><br/>" ; $ch = curl_init('https://login.taobao.com/member/login.jhtml'); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; QQWubi 133; Embedded Web Browser from: http://bsalsa.com/; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Tablet PC 2.0; .NET4.0C; .NET4.0E; InfoPath.3; Media Center PC 6.0)"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($ch,CURLOPT_COOKIEJAR,$cookie_jar); curl_setopt($ch,CURLOPT_COOKIEFILE,$cookie_jar); $data = curl_exec($ch); curl_close($ch); preg_match("/img id=\"J_StandardCode_m\" src=\"(.*?)\" data-src=/", $data, $arr1); echo "<img src=".$arr1[1]." />"; exit; ?>
到此,關(guān)于“PHP curl怎么模擬登錄帶驗證碼的網(wǎng)站”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。