需求是这样的,需要登录带验证码的网站,获取数据,但是不可能人为一直去记录数据,想通过自动采集的方式进行,如下是试验出来的结果代码!有需要的可以参考下!
PHP
namespace Home\Controller;
LoginController = ('cookie_verify','cookie_verify' = '/cookie/' = -> (->cookieName => ->cookiePathFile[] = ROOT_PATH . ->cookiePath . ->cookieName[] . '_xxx.txt'
<span style="color: #800080;">$this->success('清除cookie成功!'<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;">;
}
}
</span><span style="color: #008000;">/*</span><span style="color: #008000;">*
* <a href="https://www.jb51.cc/tag/denglu/" target="_blank" class="keywords">登录</a>xxx
</span><span style="color: #008000;">*/</span>
<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> pc28Login()
{
</span><span style="color: #800080;">$username</span> = I('username'<span style="color: #000000;">);
</span><span style="color: #800080;">$password</span> = I('password'<span style="color: #000000;">);
</span><span style="color: #800080;">$verifyCode</span> = I('verify'<span style="color: #000000;">);
</span><span style="color: #800080;">$loginData</span> = <span style="color: #0000ff;">array</span><span style="color: #000000;">(
</span>'__VIEWSTATE' => '/wEPDwUKMTU0MzAzOTU4NmQYAQUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgEFDExvZ2luX1N1Ym1pdL/yae69NsY163G3yuP0lxjz8oXu',<span style="color: #008000;">//</span><span style="color: #008000;">不把参数补全可能会不被响应哦</span>
'__VIEWSTATEGENERATOR' => 'DC42DE27','txt_UserName' => <span style="color: #800080;">$username</span>,'txt_PWD' => <span style="color: #800080;">$password</span>,'txt_VerifyCode' => <span style="color: #800080;">$verifyCode</span>,'SMONEY' => 'ABC','Login_Submit.x' => '52','Login_Submit.y' => '19',<span style="color: #000000;">
);
</span><span style="color: #800080;">$getBack</span> = <span style="color: #800080;">$this</span>->_cookieRequest('http:///noLogin.aspx',<span style="color: #800080;">$loginData</span>,<span style="color: #0000ff;">false</span>,<span style="color: #0000ff;">true</span><span style="color: #000000;">);
</span><span style="color: #0000ff;">if</span>(<span style="color: #008080;">preg_match</span>('/<div[^\<div]*?id\s*=\s*[\'\"]{1}div_msg[\'\"]{1}.*?>(.*?)<\/div>/s',<span style="color: #800080;">$getBack</span>,<span style="color: #800080;">$match</span><span style="color: #000000;">)){
</span><span style="color: #0000ff;">echo</span> 'matched\r\n'<span style="color: #000000;">;
</span><span style="color: #008080;">print_r</span>(<span style="color: #800080;">$match</span><span style="color: #000000;">);
}</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{
</span><span style="color: #0000ff;">echo</span> <span style="color: #800080;">$getBack</span>,'<br />'<span style="color: #000000;">;
</span><span style="color: #800080;">$paramsFull</span> = <span style="color: #008080;">parse_url</span>(<span style="color: #800080;">$getBack</span><span style="color: #000000;">);
</span><span style="color: #008080;">parse_str</span>(<span style="color: #800080;">$paramsFull</span>['query'],<span style="color: #800080;">$paramsFull</span>['parsedQuery'<span style="color: #000000;">]);
</span><span style="color: #0000ff;">if</span>(!<span style="color: #0000ff;">empty</span>(<span style="color: #800080;">$paramsFull</span>['parsedQuery']['Warn'<span style="color: #000000;">])) {
</span><span style="color: #800080;">$msg</span> = "您好,欢迎来P,请先<a href="https://www.jb51.cc/tag/denglu/" target="_blank" class="keywords">登录</a>。"<span style="color: #000000;">;
</span><span style="color: #0000ff;">switch</span> (<span style="color: #800080;">$paramsFull</span>['parsedQuery']['Warn'<span style="color: #000000;">])
{
</span><span style="color: #0000ff;">case</span> '2':
<span style="color: #800080;">$msg</span> = '您输入的验证码<a href="https://www.jb51.cc/tag/cuowu/" target="_blank" class="keywords">错误</a>,请重试'<span style="color: #000000;">;
</span><span style="color: #0000ff;">break</span><span style="color: #000000;">;
</span><span style="color: #0000ff;">case</span> '3':
<span style="color: #800080;">$msg</span> = '该帐号不存在,还没帐号?'<span style="color: #000000;">;
</span><span style="color: #0000ff;">break</span><span style="color: #000000;">;
</span><span style="color: #0000ff;">case</span> '5':
<span style="color: #800080;">$msg</span> = '账户已注销'<span style="color: #000000;">;
</span><span style="color: #0000ff;">break</span><span style="color: #000000;">;
</span><span style="color: #0000ff;">case</span> '6':
<span style="color: #800080;">$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;">;
</span><span style="color: #0000ff;">break</span><span style="color: #000000;">;
</span><span style="color: #0000ff;">case</span> '20':
<span style="color: #800080;">$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;">;
</span><span style="color: #0000ff;">break</span><span style="color: #000000;">;
</span><span style="color: #0000ff;">case</span> '21':
<span style="color: #800080;">$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;">;
</span><span style="color: #0000ff;">break</span><span style="color: #000000;">;
</span><span style="color: #0000ff;">case</span> '22':
<span style="color: #800080;">$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;">;
</span><span style="color: #0000ff;">break</span><span style="color: #000000;">;
</span><span style="color: #0000ff;">case</span> '23':
<span style="color: #800080;">$msg</span> = '<a href="https://www.jb51.cc/tag/denglu/" target="_blank" class="keywords">登录</a>失败,验证码失效!'<span style="color: #000000;">;
</span><span style="color: #0000ff;">break</span><span style="color: #000000;">;
</span><span style="color: #0000ff;">case</span> '32':
<span style="color: #800080;">$msg</span> = '该帐号已经绑定其他xx帐号!'<span style="color: #000000;">;
</span><span style="color: #0000ff;">break</span><span style="color: #000000;">;
</span><span style="color: #0000ff;">case</span> '33':
<span style="color: #800080;">$msg</span> = '一台电脑一天只能<a href="https://www.jb51.cc/tag/zhuce/" target="_blank" class="keywords">注册</a>一个帐号!'<span style="color: #000000;">;
</span><span style="color: #0000ff;">break</span><span style="color: #000000;">;
}
</span><span style="color: #800080;">$this</span>->error(<span style="color: #800080;">$msg</span>,'',5<span style="color: #000000;">);
}</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{
</span><span style="color: #800080;">$_SESSION</span>['user_id'] = '123456'; <span style="color: #008000;">//</span><span style="color: #008000;"><a href="https://www.jb51.cc/tag/denglu/" target="_blank" class="keywords">登录</a>设置session</span>
<span style="color: #800080;">$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;">);
}
}
}
</span><span style="color: #008000;">/*</span><span style="color: #008000;">*
* <a href="https://www.jb51.cc/tag/huoqu/" target="_blank" class="keywords">获取</a>验证码
</span><span style="color: #008000;">*/</span>
<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> getVerifyCode()
{
</span><span style="color: #800080;">$img</span> = <span style="color: #800080;">$this</span>->_cookieRequest('http:///VerifyCode_Login.aspx?id=' . <span style="color: #008080;">rand</span>(10000,999999),<span style="color: #0000ff;">null</span>,<span style="color: #0000ff;">true</span>,1<span style="color: #000000;">);
</span><span style="color: #0000ff;">echo</span> <span style="color: #800080;">$img</span><span style="color: #000000;">;
}
</span><span style="color: #008000;">/*</span><span style="color: #008000;">*
* <a href="https://www.jb51.cc/tag/shanchu/" target="_blank" class="keywords">删除</a>cookie
</span><span style="color: #008000;">*/</span>
<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> clearCookie()
{
</span><span style="color: #0000ff;">for</span>(<span style="color: #800080;">$i</span> = 0; <span style="color: #800080;">$i</span> <<span style="color: #008080;">count</span>(<span style="color: #800080;">$this</span>->cookieName); <span style="color: #800080;">$i</span>++<span style="color: #000000;">)
{
</span><span style="color: #008080;">setcookie</span>(<span style="color: #800080;">$this</span>->cookieName[<span style="color: #800080;">$i</span>],<span style="color: #008080;">time</span>() - 3600<span style="color: #000000;">);
}
<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;">/*</span><span style="color: #008000;">*
* 带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;">*/</span>
<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> _cookieRequest(<span style="color: #800080;">$url</span>,<span style="color: #800080;">$data</span> = <span style="color: #0000ff;">null</span>,<span style="color: #800080;">$redirect</span> = <span style="color: #0000ff;">false</span>,<span style="color: #800080;">$isLogin</span> = <span style="color: #0000ff;">false</span>,<span style="color: #800080;">$cookieNum</span> = 0<span style="color: #000000;">)
{
</span><span style="color: #800080;">$ch</span> =<span style="color: #000000;"> curl_init();
</span><span style="color: #800080;">$params</span>[CURLOPT_URL] = <span style="color: #800080;">$url</span>; <span style="color: #008000;">//</span><span style="color: #008000;">请求<a href="https://www.jb51.cc/tag/URLdizhi/" target="_blank" class="keywords">URL地址</a></span>
<span style="color: #800080;">$params</span>[CURLOPT_HEADER] = <span style="color: #0000ff;">false</span>; <span style="color: #008000;">//</span><span style="color: #008000;">是否返回响应头信息</span>
<span style="color: #800080;">$params</span>[CURLOPT_RETURNTRANSFER] = <span style="color: #0000ff;">true</span>; <span style="color: #008000;">//</span><span style="color: #008000;">是否将结果返回</span>
<span style="color: #800080;">$params</span>[CURLOPT_FOLLOWLOCATION] = <span style="color: #0000ff;">true</span>; <span style="color: #008000;">//</span><span style="color: #008000;">是否<a href="https://www.jb51.cc/tag/zhongdingxiang/" target="_blank" class="keywords">重定向</a></span>
<span style="color: #800080;">$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;">;
</span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$data</span><span style="color: #000000;">)
{
</span><span style="color: #800080;">$params</span>[CURLOPT_POST] = <span style="color: #0000ff;">true</span><span style="color: #000000;">;
</span><span style="color: #800080;">$params</span>[CURLOPT_POSTFIELDS] = <span style="color: #008080;">http_build_query</span>(<span style="color: #800080;">$data</span><span style="color: #000000;">);
}
</span><span style="color: #008000;">//</span><span style="color: #008000;">判断是否有cookie,有的话直接使用</span>
<span style="color: #0000ff;">if</span> (!<span style="color: #0000ff;">empty</span>(<span style="color: #800080;">$_COOKIE</span>[<span style="color: #800080;">$this</span>->cookieName[<span style="color: #800080;">$cookieNum</span>]]) && <span style="color: #008080;">is_file</span>(<span style="color: #800080;">$this</span>->cookiePathFile[<span style="color: #800080;">$cookieNum</span><span style="color: #000000;">]))
{
</span><span style="color: #800080;">$params</span>[CURLOPT_COOKIEFILE] = <span style="color: #800080;">$this</span>->cookiePathFile[<span style="color: #800080;">$cookieNum</span>]; <span style="color: #008000;">//</span><span style="color: #008000;">这里判断cookie</span>
<span style="color: #0000ff;">if</span>(<span style="color: #800080;">$isLogin</span><span style="color: #000000;">)
{
</span><span style="color: #800080;">$params</span>[CURLOPT_COOKIEJAR] = <span style="color: #800080;">$this</span>->cookiePathFile[<span style="color: #800080;">$cookieNum</span>]; <span style="color: #008000;">//</span><span style="color: #008000;">写入cookie信息,可能每次都会有写入</span>
<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;">;
}
}
原文链接:https://www.f2er.com/php/74365.html