php - curl 模拟找回密码出现不能理解的错误

查看:100
本文介绍了php - curl 模拟找回密码出现不能理解的错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

curl模拟找回密码(华夏保险)直接找回密码页面 http://www.ihxlife.com/forget...
输入手机号15677748704(测试)获取验证码 直接会提示验证码错误

但先进入官网后通过官网链接进入页面能获取验证码

通过代码实现 先访问主页面获取cookie 再利用获取的cookie访问找回密码页面更新cookie
然后获取验证码 ——————失败 短信验证码发送失败

 public function forgetPwdIndex(){
        $uKey = 'HuaXia' . date("YmdHis") . uniqid();
        $cookieVerify = APP_COOKIE . "/" . $uKey . ".tmp";
        $url = 'http://www.ihxlife.com/';//登录主页的url来获取cookie
        $this->getCookie($url, $cookieVerify);//获取到登录页面的cookie
        //获取找回密码页的cookie
        $pwdUrl='http://www.ihxlife.com/forget/forgetPwd';
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $pwdUrl);
        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:40.0) Gecko/20100101 Firefox/40.0');
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_TIMEOUT, 120); // 设置超时限制防止死循环
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
            'Accept-Encoding:gzip, deflate',
            'Accept-Language:zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
            'Connection:keep-alive',
            'Host:www.ihxlife.com'));
        curl_setopt($ch, CURLOPT_REFERER,'http://www.ihxlife.com/');
        curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieVerify);
        curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieVerify);
        curl_exec($ch);
        curl_close($ch);
        //echo $cookieVerify."<br>";
        $this->assign('key', $uKey);//传到页面中 在页面中post该数据 拼组cookie文件
        $this->display();
    }
    
    public function sendPwdMobileCode(){
    if(I('post.key')==''||I('post.mobile')==''){
        echo json_encode(array('status'=>'10001','message'=>'参数错误'));
        die;
    }
    $requireUrl='http://www.ihxlife.com/sms/smsCode_Send';//请求地址
    $postData='mobile='.I('post.mobile').'&busiType=10019&effectiveTime=180';
    $cookieVerify = APP_COOKIE . "/" . I('post.key') . ".tmp";
    echo $cookieVerify."<br>";
    $referer='http://www.ihxlife.com/forget/forgetPwd';
    echo $this->curlPost($requireUrl,$postData,$cookieVerify,$referer,30,true);
}
    

       public function getCookie($url, $cookieVerify)
    {
        echo $cookieVerify."<br>";
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:40.0) Gecko/20100101 Firefox/40.0');
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
            'Accept-Encoding:gzip, deflate',
'Accept-Language:zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
'Connection:keep-alive',
'Host:www.ihxlife.com'));
        curl_setopt($ch, CURLOPT_TIMEOUT, 120); // 设置超时限制防止死循环
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieVerify);
        curl_exec($ch);
        curl_close($ch);
    }
    
    
 

public function curlPost($url, $post_fields, $cookieVerify, $referer = '', $timeOut = 30, $header = '')
{
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1);
    curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:40.0) Gecko/20100101 Firefox/40.0');
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
    if ($referer) {
        curl_setopt($curl, CURLOPT_REFERER, $referer);
    } else {
        curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
    }
    if ($header) {
        //curl_setopt($curl, CURLOPT_HTTPHEADER, array('Host:www.ihxlife.com', 'X-Requested-With:XMLHttpRequest'));
        curl_setopt($curl, CURLOPT_HTTPHEADER, array('Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
            'Accept-Encoding:gzip, deflate',
            'Accept-Language:zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
            'Content-Type:application/x-www-form-urlencoded; charset=UTF-8',
            'Connection:keep-alive',
            'Host:www.ihxlife.com',
            'X-Requested-With:XMLHttpRequest'));
    }
    curl_setopt($curl, CURLOPT_POSTFIELDS, $post_fields);
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_COOKIEFILE, $cookieVerify);
    curl_setopt($curl, CURLOPT_COOKIEJAR, $cookieVerify);
    curl_setopt($curl, CURLOPT_TIMEOUT, $timeOut);
    curl_setopt($curl, CURLOPT_HEADER, 0);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $resultData = curl_exec($curl); // 执行操作
    curl_close($curl);
    return $resultData;
}

解决方案

问题解决了。这个网站在加载主页登录模块的验证码时更新了cookie。我之前的思路一直在要加载页面要加载页面 然后没有注意到这里 只要再访问下主页验证码保存更新的验证码就好!

这篇关于php - curl 模拟找回密码出现不能理解的错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆