curl 模拟登录微信公众平台带验证码
2014-09-22 22:20
106 查看
这段时间一直写个项目, 从切图到前端到后台都要搞定,真tm累。 今天下午手残,不停用错误的密码去模拟登录微信公众平台,结果后来出现验证码,瞬间悲剧(菜鸟从来没搞过带验证码的)。
研究了一下,发现其实很简单,直接把生成的二维码图片拉过来,让用户自己输入,再提交一遍表单即可。其实中间还是有些坑,比如生成验证码的时候,要把cookie保存下,登录的时候要带上这个cookie,要不然会总是提示需要验证码。
客户端:
服务端-验证码:
code.php
服务端-登录:
wx-login.php
研究了一下,发现其实很简单,直接把生成的二维码图片拉过来,让用户自己输入,再提交一遍表单即可。其实中间还是有些坑,比如生成验证码的时候,要把cookie保存下,登录的时候要带上这个cookie,要不然会总是提示需要验证码。
客户端:
<body> <form> <p><input type="text" name="user" value="" />帐号</p> <p><input type="password" name="pass" value="" />密码</p> <div style="display:none"> <input type="text" name="code" />验证码 <img src="" id="imgcode" /><a href="javascript:;" id="changCode">换一张</a> </div> <input type="button" class="submit" value="绑定"/> </form> <script src="http://code.jquery.com/jquery-1.9.0.js"></script> <script type="text/javascript"> $(function(){ $('.submit').on('click', function(){ var user = $('input[name=user]').val(), pass = $('input[name=pass]').val(); var data = { 'user' : user, 'pass' : pass }; if ( $('img').attr('src') != '' ) { var code = $('input[name=code]').val(); data.code = code; } $.post('wx-login.php', data, function(res){ var oRes = JSON.parse(res); //console.log(oRes); // -8 需要验证码 if ( oRes.base_resp.ret == '-8') { $('img').attr('src','code.php?u='+user); $('div').show(); } else if( oRes.base_resp.ret == 0 ){ alert('登录成功'); } else { alert('登录失败'); } }); }); $('#changCode').on('click', function(){ var user = $('input[name=user]').val(); $('img').attr('src','code.php?u='+user+'&s='+Math.random(1)); }); }); </script> </body>
服务端-验证码:
code.php
$username = $_GET['u']; $url = "https://mp.weixin.qq.com/cgi-bin/verifycode?username={$username}&r=".time(); //必须绝对路径 $file = dirname(__FILE__).'/cookie/cookie_'.$username.'.txt'; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt ( $curl, CURLOPT_SSL_VERIFYPEER, 0 ); curl_setopt ( $curl, CURLOPT_SSL_VERIFYHOST, 2 ); curl_setopt ($curl, CURLOPT_TIMEOUT, 10 ); curl_setopt($curl, CURLOPT_HEADER, 0); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_COOKIEJAR, $file); $res = curl_exec ($curl); curl_close ( $curl ); header("Content-type:image/jpeg"); echo $res;
服务端-登录:
wx-login.php
$arr = array( 'username'=>$_POST['user'], //wx公众帐号 'pwd'=>md5($_POST['pass']), //wx公众帐号密码 'f'=>'json' ); if (isset($_POST['code'])) { $arr['imgcode'] = $_POST['code']; } $file = dirname(__FILE__).'/cookie/cookie_'.$arr['username'].'.txt'; $headers = array( 'User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36', 'Referer:https://mp.weixin.qq.com/', ); $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, 'https://mp.weixin.qq.com/cgi-bin/login'); curl_setopt ( $curl, CURLOPT_SSL_VERIFYPEER, 0 ); curl_setopt ( $curl, CURLOPT_SSL_VERIFYHOST, 2 ); curl_setopt ($curl, CURLOPT_TIMEOUT, 10 ); curl_setopt($curl, CURLOPT_HEADER, 0); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($arr)); curl_setopt($curl, CURLOPT_HTTPHEADER,$headers); if (!empty($arr['imgcode'])) { curl_setopt($curl, CURLOPT_COOKIEFILE, $file); } $result = curl_exec ($curl); curl_close ( $curl ); echo $result;
相关文章推荐
- curl 模拟登录微信公众平台带验证码
- PHP使用CURL实现对带有验证码的网站进行模拟登录的方法
- PHP使用CURL实现对带有验证码的网站进行模拟登录的方法
- curl模拟带验证码的登录
- PHP使用CURL实现对带有验证码的网站进行模拟登录的方法
- 基于curl实现微信公众平台的模拟登录、开发者信息获取和端口绑定
- (转)php_curl模拟登录有验证码实例
- PHP使用CURL实现对带有验证码的网站进行模拟登录的方法
- PHP使用CURL对带有验证码的网站进行模拟登录
- PHP使用CURL实现对带有验证码的网站进行模拟登录的方法
- php教程 CURL实现带有验证码网站的模拟登录的方法
- php_curl模拟登录有验证码实例
- php_curl模拟登录有验证码实例
- PHP使用CURL实现对带有验证码的网站进行模拟登录的方法
- 验证码检查curl 模拟登录
- php_curl模拟登录有验证码实例
- 使用PHP-curl获取验证码并模拟登录教务系统
- [PHP自动化-进阶]002.CURL模拟登录带有验证码的网站
- PHP CURL获取cookies模拟登录…
- php使用curl模拟登录后采集页面的例子