php使用curl模拟登录带验证码的网站[开发篇]
发布时间:2020-05-25 03:35:26 所属栏目:PHP 来源:互联网
导读:需求是这样的,需要登录带验证码的网站,获取数据,但是不可能人为一直去记录数据,想通过自动采集的方式进行,如下是试验出来的结果代码!有需要的可以参考下!?phpnamespace HomeController;use ThinkController;class LoginController extends Controller
需求是这样的,需要登录带验证码的网站,获取数据,但是不可能人为一直去记录数据,想通过自动采集的方式进行,如下是试验出来的结果代码!有需要的可以参考下! LoginController = ('cookie_verify','cookie_verify' = '/cookie/' = -> (->cookieName => ->cookiePathFile[] = ROOT_PATH . ->cookiePath . ->cookieName[] . '_xxx.txt'</span><span style="color: #008000;">/*</span><span style="color: #008000;">*
* 登录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]*?ids*=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> 'matchedrn'<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,请先登录。"<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> = '您输入的验证码错误,请重试'<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> = '密码错误,如果连续错误3次半小时内不能登录!'<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> = '今日密码错误3次及以上,请于半小时后再来登录!'<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的所有帐号密码错误9次以上,请于半小时后再来登录!'<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> = '登录失败,您所在IP今日登录的帐号过多!'<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> = '登录失败,验证码失效!'<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> = '一台电脑一天只能注册一个帐号!'<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;">登录设置session</span>
<span style="color: #800080;">$this</span>->success('登录P网站成功',U('Index/index'),5<span style="color: #000000;">);
}
}
}
</span><span style="color: #008000;">/*</span><span style="color: #008000;">*
* 获取验证码
</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;">*
* 删除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;">);
}
(编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |