php使用curl模拟登录带验证码的网站[开发篇]

前端之家收集整理的这篇文章主要介绍了php使用curl模拟登录带验证码的网站[开发篇]前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

     需求是这样的,需要登录带验证码的网站,获取数据,但是不可能人为一直去记录数据,想通过自动采集的方式进行,如下是试验出来的结果代码!有需要的可以参考下!

PHP namespace Home\Controller; LoginController = ('cookie_verify','cookie_verify' = '/cookie/' = -> (->cookieName => ->cookiePathFile[] = ROOT_PATH . ->cookiePath . ->cookieName[] . '_xxx.txt'</span><span style="color: #008000;"&gt;/*</span><span style="color: #008000;"&gt;* * <a href="https://www.jb51.cc/tag/denglu/" target="_blank" class="keywords">登录</a>xxx </span><span style="color: #008000;"&gt;*/</span> <span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;function</span><span style="color: #000000;"&gt; pc28Login() { </span><span style="color: #800080;"&gt;$username</span> = I('username'<span style="color: #000000;"&gt;); </span><span style="color: #800080;"&gt;$password</span> = I('password'<span style="color: #000000;"&gt;); </span><span style="color: #800080;"&gt;$verifyCode</span> = I('verify'<span style="color: #000000;"&gt;); </span><span style="color: #800080;"&gt;$loginData</span> = <span style="color: #0000ff;"&gt;array</span><span style="color: #000000;"&gt;( </span>'__VIEWSTATE' => '/wEPDwUKMTU0MzAzOTU4NmQYAQUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgEFDExvZ2luX1N1Ym1pdL/yae69NsY163G3yuP0lxjz8oXu',<span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;不把参数补全可能会不被响应哦</span> '__VIEWSTATEGENERATOR' => 'DC42DE27','txt_UserName' => <span style="color: #800080;"&gt;$username</span>,'txt_PWD' => <span style="color: #800080;"&gt;$password</span>,'txt_VerifyCode' => <span style="color: #800080;"&gt;$verifyCode</span>,'SMONEY' => 'ABC','Login_Submit.x' => '52','Login_Submit.y' => '19',<span style="color: #000000;"&gt; ); </span><span style="color: #800080;"&gt;$getBack</span> = <span style="color: #800080;"&gt;$this</span>->_cookieRequest('http:///noLogin.aspx',<span style="color: #800080;"&gt;$loginData</span>,<span style="color: #0000ff;"&gt;false</span>,<span style="color: #0000ff;"&gt;true</span><span style="color: #000000;"&gt;); </span><span style="color: #0000ff;"&gt;if</span>(<span style="color: #008080;"&gt;preg_match</span>('/<div[^\<div]*?id\s*=\s*[\'\"]{1}div_msg[\'\"]{1}.*?>(.*?)<\/div>/s',<span style="color: #800080;"&gt;$getBack</span>,<span style="color: #800080;"&gt;$match</span><span style="color: #000000;"&gt;)){ </span><span style="color: #0000ff;"&gt;echo</span> 'matched\r\n'<span style="color: #000000;"&gt;; </span><span style="color: #008080;"&gt;print_r</span>(<span style="color: #800080;"&gt;$match</span><span style="color: #000000;"&gt;); }</span><span style="color: #0000ff;"&gt;else</span><span style="color: #000000;"&gt;{ </span><span style="color: #0000ff;"&gt;echo</span> <span style="color: #800080;"&gt;$getBack</span>,'<br />'<span style="color: #000000;"&gt;; </span><span style="color: #800080;"&gt;$paramsFull</span> = <span style="color: #008080;"&gt;parse_url</span>(<span style="color: #800080;"&gt;$getBack</span><span style="color: #000000;"&gt;); </span><span style="color: #008080;"&gt;parse_str</span>(<span style="color: #800080;"&gt;$paramsFull</span>['query'],<span style="color: #800080;"&gt;$paramsFull</span>['parsedQuery'<span style="color: #000000;"&gt;]); </span><span style="color: #0000ff;"&gt;if</span>(!<span style="color: #0000ff;"&gt;empty</span>(<span style="color: #800080;"&gt;$paramsFull</span>['parsedQuery']['Warn'<span style="color: #000000;"&gt;])) { </span><span style="color: #800080;"&gt;$msg</span> = "您好,欢迎来P,请先<a href="https://www.jb51.cc/tag/denglu/" target="_blank" class="keywords">登录</a>。"<span style="color: #000000;"&gt;; </span><span style="color: #0000ff;"&gt;switch</span> (<span style="color: #800080;"&gt;$paramsFull</span>['parsedQuery']['Warn'<span style="color: #000000;"&gt;]) { </span><span style="color: #0000ff;"&gt;case</span> '2': <span style="color: #800080;"&gt;$msg</span> = '您输入的验证码<a href="https://www.jb51.cc/tag/cuowu/" target="_blank" class="keywords">错误</a>,请重试'<span style="color: #000000;"&gt;; </span><span style="color: #0000ff;"&gt;break</span><span style="color: #000000;"&gt;; </span><span style="color: #0000ff;"&gt;case</span> '3': <span style="color: #800080;"&gt;$msg</span> = '该帐号不存在,还没帐号?'<span style="color: #000000;"&gt;; </span><span style="color: #0000ff;"&gt;break</span><span style="color: #000000;"&gt;; </span><span style="color: #0000ff;"&gt;case</span> '5': <span style="color: #800080;"&gt;$msg</span> = '账户已注销'<span style="color: #000000;"&gt;; </span><span style="color: #0000ff;"&gt;break</span><span style="color: #000000;"&gt;; </span><span style="color: #0000ff;"&gt;case</span> '6': <span style="color: #800080;"&gt;$msg</span> = '密码<a href="https://www.jb51.cc/tag/cuowu/" target="_blank" class="keywords">错误</a>,如果连续<a href="https://www.jb51.cc/tag/cuowu/" target="_blank" class="keywords">错误</a>3次半小时内不能<a href="https://www.jb51.cc/tag/denglu/" target="_blank" class="keywords">登录</a>!'<span style="color: #000000;"&gt;; </span><span style="color: #0000ff;"&gt;break</span><span style="color: #000000;"&gt;; </span><span style="color: #0000ff;"&gt;case</span> '20': <span style="color: #800080;"&gt;$msg</span> = '今日密码<a href="https://www.jb51.cc/tag/cuowu/" target="_blank" class="keywords">错误</a>3次及以上,请于半小时后再来<a href="https://www.jb51.cc/tag/denglu/" target="_blank" class="keywords">登录</a>!'<span style="color: #000000;"&gt;; </span><span style="color: #0000ff;"&gt;break</span><span style="color: #000000;"&gt;; </span><span style="color: #0000ff;"&gt;case</span> '21': <span style="color: #800080;"&gt;$msg</span> = '今日您所在IP的所有帐号密码<a href="https://www.jb51.cc/tag/cuowu/" target="_blank" class="keywords">错误</a>9次以上,请于半小时后再来<a href="https://www.jb51.cc/tag/denglu/" target="_blank" class="keywords">登录</a>!'<span style="color: #000000;"&gt;; </span><span style="color: #0000ff;"&gt;break</span><span style="color: #000000;"&gt;; </span><span style="color: #0000ff;"&gt;case</span> '22': <span style="color: #800080;"&gt;$msg</span> = '<a href="https://www.jb51.cc/tag/denglu/" target="_blank" class="keywords">登录</a>失败,您所在IP今日<a href="https://www.jb51.cc/tag/denglu/" target="_blank" class="keywords">登录</a>的帐号过多!'<span style="color: #000000;"&gt;; </span><span style="color: #0000ff;"&gt;break</span><span style="color: #000000;"&gt;; </span><span style="color: #0000ff;"&gt;case</span> '23': <span style="color: #800080;"&gt;$msg</span> = '<a href="https://www.jb51.cc/tag/denglu/" target="_blank" class="keywords">登录</a>失败,验证码失效!'<span style="color: #000000;"&gt;; </span><span style="color: #0000ff;"&gt;break</span><span style="color: #000000;"&gt;; </span><span style="color: #0000ff;"&gt;case</span> '32': <span style="color: #800080;"&gt;$msg</span> = '该帐号已经绑定其他xx帐号!'<span style="color: #000000;"&gt;; </span><span style="color: #0000ff;"&gt;break</span><span style="color: #000000;"&gt;; </span><span style="color: #0000ff;"&gt;case</span> '33': <span style="color: #800080;"&gt;$msg</span> = '一台电脑一天只能<a href="https://www.jb51.cc/tag/zhuce/" target="_blank" class="keywords">注册</a>一个帐号!'<span style="color: #000000;"&gt;; </span><span style="color: #0000ff;"&gt;break</span><span style="color: #000000;"&gt;; } </span><span style="color: #800080;"&gt;$this</span>->error(<span style="color: #800080;"&gt;$msg</span>,'',5<span style="color: #000000;"&gt;); }</span><span style="color: #0000ff;"&gt;else</span><span style="color: #000000;"&gt;{ </span><span style="color: #800080;"&gt;$_SESSION</span>['user_id'] = '123456'; <span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;<a href="https://www.jb51.cc/tag/denglu/" target="_blank" class="keywords">登录</a>设置session</span> <span style="color: #800080;"&gt;$this</span>->success('<a href="https://www.jb51.cc/tag/denglu/" target="_blank" class="keywords">登录</a>P网站成功',U('Index/index'),5<span style="color: #000000;"&gt;); } } } </span><span style="color: #008000;"&gt;/*</span><span style="color: #008000;"&gt;* * <a href="https://www.jb51.cc/tag/huoqu/" target="_blank" class="keywords">获取</a>验证码 </span><span style="color: #008000;"&gt;*/</span> <span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;function</span><span style="color: #000000;"&gt; getVerifyCode() { </span><span style="color: #800080;"&gt;$img</span> = <span style="color: #800080;"&gt;$this</span>->_cookieRequest('http:///VerifyCode_Login.aspx?id=' . <span style="color: #008080;"&gt;rand</span>(10000,999999),<span style="color: #0000ff;"&gt;null</span>,<span style="color: #0000ff;"&gt;true</span>,1<span style="color: #000000;"&gt;); </span><span style="color: #0000ff;"&gt;echo</span> <span style="color: #800080;"&gt;$img</span><span style="color: #000000;"&gt;; } </span><span style="color: #008000;"&gt;/*</span><span style="color: #008000;"&gt;* * <a href="https://www.jb51.cc/tag/shanchu/" target="_blank" class="keywords">删除</a>cookie </span><span style="color: #008000;"&gt;*/</span> <span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;function</span><span style="color: #000000;"&gt; clearCookie() { </span><span style="color: #0000ff;"&gt;for</span>(<span style="color: #800080;"&gt;$i</span> = 0; <span style="color: #800080;"&gt;$i</span> <<span style="color: #008080;"&gt;count</span>(<span style="color: #800080;"&gt;$this</span>->cookieName); <span style="color: #800080;"&gt;$i</span>++<span style="color: #000000;"&gt;) { </span><span style="color: #008080;"&gt;setcookie</span>(<span style="color: #800080;"&gt;$this</span>->cookieName[<span style="color: #800080;"&gt;$i</span>],<span style="color: #008080;"&gt;time</span>() - 3600<span style="color: #000000;"&gt;); }

<span style="color: #008000;">//<span style="color: #008000;"> unlink($this->cookiePathFile);
<span style="color: #800080;">$this->success('清除cookie成功!'<span style="color: #000000;">);
}

</span><span style="color: #008000;"&gt;/*</span><span style="color: #008000;"&gt;*
 * 带COOKIE的访问curl
 * @param $url 访问地址
 * @param bool|array $data 传递的数据
 * @param bool $redirect 是否<a href="https://www.jb51.cc/tag/huoqu/" target="_blank" class="keywords">获取</a><a href="https://www.jb51.cc/tag/zhongdingxiang/" target="_blank" class="keywords">重定向</a>的地址
 * @param bool $isLogin 是否为<a href="https://www.jb51.cc/tag/denglu/" target="_blank" class="keywords">登录</a>,<a href="https://www.jb51.cc/tag/denglu/" target="_blank" class="keywords">登录</a>需要保存COOKIE
 * @return mixed 地址或者返回<a href="https://www.jb51.cc/tag/neirong/" target="_blank" class="keywords">内容</a>
 </span><span style="color: #008000;"&gt;*/</span>
<span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;function</span> _cookieRequest(<span style="color: #800080;"&gt;$url</span>,<span style="color: #800080;"&gt;$data</span> = <span style="color: #0000ff;"&gt;null</span>,<span style="color: #800080;"&gt;$redirect</span> = <span style="color: #0000ff;"&gt;false</span>,<span style="color: #800080;"&gt;$isLogin</span> = <span style="color: #0000ff;"&gt;false</span>,<span style="color: #800080;"&gt;$cookieNum</span> = 0<span style="color: #000000;"&gt;)
{

    </span><span style="color: #800080;"&gt;$ch</span> =<span style="color: #000000;"&gt; curl_init();
    </span><span style="color: #800080;"&gt;$params</span>[CURLOPT_URL] = <span style="color: #800080;"&gt;$url</span>;                    <span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;请求<a href="https://www.jb51.cc/tag/URLdizhi/" target="_blank" class="keywords">URL地址</a></span>
    <span style="color: #800080;"&gt;$params</span>[CURLOPT_HEADER] = <span style="color: #0000ff;"&gt;false</span>;                <span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;是否返回响应头信息</span>
    <span style="color: #800080;"&gt;$params</span>[CURLOPT_RETURNTRANSFER] = <span style="color: #0000ff;"&gt;true</span>;         <span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;是否将结果返回</span>
    <span style="color: #800080;"&gt;$params</span>[CURLOPT_FOLLOWLOCATION] = <span style="color: #0000ff;"&gt;true</span>;         <span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;是否<a href="https://www.jb51.cc/tag/zhongdingxiang/" target="_blank" class="keywords">重定向</a></span>
    <span style="color: #800080;"&gt;$params</span>[CURLOPT_USERAGENT] = 'Mozilla/5.0 (Windows NT 5.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1'<span style="color: #000000;"&gt;;

    </span><span style="color: #0000ff;"&gt;if</span>(<span style="color: #800080;"&gt;$data</span><span style="color: #000000;"&gt;)
    {
        </span><span style="color: #800080;"&gt;$params</span>[CURLOPT_POST] = <span style="color: #0000ff;"&gt;true</span><span style="color: #000000;"&gt;;
        </span><span style="color: #800080;"&gt;$params</span>[CURLOPT_POSTFIELDS] = <span style="color: #008080;"&gt;http_build_query</span>(<span style="color: #800080;"&gt;$data</span><span style="color: #000000;"&gt;);
    }
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;判断是否有cookie,有的话直接使用</span>
    <span style="color: #0000ff;"&gt;if</span> (!<span style="color: #0000ff;"&gt;empty</span>(<span style="color: #800080;"&gt;$_COOKIE</span>[<span style="color: #800080;"&gt;$this</span>->cookieName[<span style="color: #800080;"&gt;$cookieNum</span>]]) &amp;&amp; <span style="color: #008080;"&gt;is_file</span>(<span style="color: #800080;"&gt;$this</span>->cookiePathFile[<span style="color: #800080;"&gt;$cookieNum</span><span style="color: #000000;"&gt;]))
    {
        </span><span style="color: #800080;"&gt;$params</span>[CURLOPT_COOKIEFILE] = <span style="color: #800080;"&gt;$this</span>->cookiePathFile[<span style="color: #800080;"&gt;$cookieNum</span>];      <span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;这里判断cookie</span>

        <span style="color: #0000ff;"&gt;if</span>(<span style="color: #800080;"&gt;$isLogin</span><span style="color: #000000;"&gt;)
        {
            </span><span style="color: #800080;"&gt;$params</span>[CURLOPT_COOKIEJAR] = <span style="color: #800080;"&gt;$this</span>->cookiePathFile[<span style="color: #800080;"&gt;$cookieNum</span>];        <span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;写入cookie信息,可能每次都会有写入</span>

<span style="color: #000000;"> }
}
<span style="color: #0000ff;">else<span style="color: #000000;">
{
<span style="color: #008000;">//<span style="color: #008000;"> $cookie_jar = tempnam($cookie_path,'cookie');     //产生一个cookie文件
<span style="color: #800080;">$params[CURLOPT_COOKIEJAR] = <span style="color: #800080;">$this->cookiePathFile[<span style="color: #800080;">$cookieNum]; <span style="color: #008000;">//<span style="color: #008000;">写入cookie信息
<span style="color: #008080;">setcookie(<span style="color: #800080;">$this->cookieName[<span style="color: #800080;">$cookieNum],<span style="color: #800080;">$this->cookiePathFile[<span style="color: #800080;">$cookieNum],<span style="color: #008080;">time() + 120); <span style="color: #008000;">//<span style="color: #008000;">保存cookie路径
<span style="color: #000000;"> }
curl_setopt_array(<span style="color: #800080;">$ch,<span style="color: #800080;">$params); <span style="color: #008000;">//<span style="color: #008000;">传入curl参数
<span style="color: #800080;">$content = curl_exec(<span style="color: #800080;">$ch<span style="color: #000000;">);
<span style="color: #800080;">$headers = curl_getinfo(<span style="color: #800080;">$ch<span style="color: #000000;">);
<span style="color: #008000;">//<span style="color: #008000;"> echo $content;
curl_close(<span style="color: #800080;">$ch<span style="color: #000000;">);
<span style="color: #0000ff;">if (<span style="color: #800080;">$url != <span style="color: #800080;">$headers["url"] && <span style="color: #800080;">$redirect == <span style="color: #0000ff;">false<span style="color: #000000;">)
{
<span style="color: #0000ff;">return <span style="color: #800080;">$headers["url"<span style="color: #000000;">];
}
<span style="color: #0000ff;">return <span style="color: #800080;">$content<span style="color: #000000;">;
}
}

  登录以后,就可以使用带cookie的访问其他页面了!

  

原文链接:https://www.f2er.com/php/74365.html

猜你在找的PHP相关文章