PHP curl模拟登录带验证码的网站
发布:smiling 来源: PHP粉丝网 添加日期:2021-06-27 16:17:17 浏览: 评论:0
最近接了个项目,其中有需求是要登录带验证码的网站,获取数据,但是我们不可能人为的一直去记录数据,想通过自动采集的方式进行,下面小编给大家带来的相关代码,对php curl 模拟登录带验证码的网站感兴趣的朋友一起学习吧。
需求是这样的,需要登录带验证码的网站,获取数据,但是不可能人为一直去记录数据,想通过自动采集的方式进行,如下是试验出来的结果代码!有需要的可以参考下!
- <?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', //不把参数补全可能会不被响应哦
- '__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(!emptyempty($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 <count($this->cookieName); $i++)
- {
- setcookie($this->cookieName[$i], '', time() - 3600);
- }
- // unlink($this->cookiePathFile);
- $this->success('清除cookie成功!');
- }
- /**
- * 带COOKIE的访问curl
- * @param $url 访问地址
- * @param bool|array $data 传递的数据
- * @param bool $redirect 是否获取重定向的地址
- * @return mixed 地址或者返回内容
- */
- public function _cookieRequest($url, $data = null, $redirect = false, $cookieNum = 0)
- {
- $ch = curl_init();
- $params[CURLOPT_URL] = $url; //请求url地址
- $params[CURLOPT_HEADER] = false; //是否返回响应头信息
- $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';
- if($data)
- {
- $params[CURLOPT_POST] = true;
- $params[CURLOPT_POSTFIELDS] = http_build_query($data);
- }
- //判断是否有cookie,有的话直接使用
- if (!emptyempty($_COOKIE[$this->cookieName[$cookieNum]]) && is_file($this->cookiePathFile[$cookieNum]))
- {
- $params[CURLOPT_COOKIEFILE] = $this->cookiePathFile[$cookieNum]; //这里判断cookie
- }
- else
- {
- // $cookie_jar = tempnam($cookie_path, 'cookie'); //产生一个cookie文件
- $params[CURLOPT_COOKIEJAR] = $this->cookiePathFile[$cookieNum]; //写入cookie信息
- setcookie($this->cookieName[$cookieNum], $this->cookiePathFile[$cookieNum], time() + 120); //保存cookie路径
- }
- curl_setopt_array($ch, $params); //传入curl参数
- $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(emptyempty($_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;
- ?>
Tags: curl模拟登录 PHP验证码
- 上一篇:PHP可变变量学习小结
- 下一篇:PHP实现QQ空间自动回复说说的方法
相关文章
- ·PHP中使用CURL模拟登录并获取数据实例(2021-03-05)
- ·PHP使用CURL模拟登录的方法(2021-06-09)
- ·php网页生成验证码实现程序(2014-07-30)
- ·简单实例php验证码代码(2014-08-17)
- ·PHP验证码生成与验证例子(2014-08-22)
- ·PHP验证码生成程序几种方法(2014-08-22)
- ·PHP验证码实现代码简单示例(2014-08-22)
- ·php验证码程序代码(2014-08-22)
- ·PHP验证码之Ajax验证实现方法(2014-08-22)
- ·php中文汉字验证码程序(2014-08-23)
- ·一个完整php验证码实例程序(2014-08-25)
- ·php 用户登录验证码的实现方法(2014-09-11)
- ·php jquery 验证码代码(2014-09-20)
- ·php验证码生成器(2018-08-06)
- ·一个好用的PHP验证码类实例分享(2020-08-17)
- ·PHP+javascript制作带提示的验证码源码分享(2021-01-15)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)