PHP curl模拟登录带验证码的网站
php  /  管理员 发布于 3年前   186
需求是这样的,需要登录带验证码的网站,获取数据,但是不可能人为一直去记录数据,想通过自动采集的方式进行,如下是试验出来的结果代码!有需要的可以参考下! 登录以后,就可以使用带cookie的访问其他页面了! ps:php curl 登录淘宝 提交上去后显示为填写验证码,登录不上去 填写验证码提交: 提取验证码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', //不把参数补全可能会不被响应哦 '__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('/
'; $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 = '密码错误,如果连续错误3次半小时内不能登录!'; break; case '20': $msg = '今日密码错误3次及以上,请于半小时后再来登录!'; break; case '21': $msg = '今日您所在IP的所有帐号密码错误9次以上,请于半小时后再来登录!'; break; case '22': $msg = '登录失败,您所在IP今日登录的帐号过多!'; break; case '23': $msg = '登录失败,验证码失效!'; break; case '32': $msg = '该帐号已经绑定其他xx帐号!'; break; case '33': $msg = '一台电脑一天只能注册一个帐号!'; break; } $this->error($msg, '', 5); }else{ $_SESSION['user_id'] = '123456'; //登录设置session $this->success('登录P网站成功', 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
/", $data, $arr); $post_fields = "umto=" . $arr[1] . "&" . $post_fields."&TPL_checkcode="; echo "
" ; $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 "";exit;?>您可能感兴趣的文章:
123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..路人 在
php中使用hyperf框架调用讯飞星火大模型实现国内版chatgpt功能示例中评论 教程很详细,如果加个前端chatgpt对话页面就完美了..Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号