已掉线,重新登录

首页 > 绿虎论坛 > 历史版块 > 编程 > PHP > 源码

标题: 模拟登录有问

作者: @Ta

时间: 2012-12-23

点击: 12882

模拟登录飞信,验证码怎么弄,提示验证码错误,我用curl取到表单的cookie也不行
表单
<?php
$cokie=dirname(__FILE__).'/cokie.ck';
@unlink($cokie);
$curl = curl_init('http://f.10086.cn/im/login/login.action');

curl_setopt($curl, CURLOPT_HEADER, 0);

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($curl, CURLOPT_COOKIEJAR, $cokie);

curl_setopt($curl, CURLOPT_POST, 1);

$file = curl_exec($curl);

curl_close($curl);
preg_match_all('/<img src="\/im\/systemimage\/verifycode(.*).png\?tp=im5"/Ui',$file,$match);
$id=$match[1][0];
echo '<form method="post" action="yz.php">手机号:<input name="m" type="text"/>
密码:<input name="pass" type="password"/>
输入验证码:<input name="captchaCode" type="text"/>
<img src="http://f.10086.cn/im/systemimage/verifycode'.$match[1][0].'.png?tp=im5" alt="图片测试"><input type="hidden" name="loginstatus" value="4"/><input type="hidden" name="id" value="'.$id.'4"/>
<input type="submit" value="提交"></form>';


?>
处理
<?php
header('Content-Type: text/html; charset=utf8');
$cookie=dirname(__FILE__).'/cookie.ck';
$cokie=dirname(__FILE__).'/cokie.ck';
@unlink($cookie);
$post['m']=$_POST['m'];
$post['pass']=$_POST['pass'];
$post['captchaCode']=$_POST['captchaCode'];
$post['loginstatus']=$_POST['loginstatus'];
$curl = curl_init('http://f.10086.cn/im/login/inputpasssubmit1.action');

curl_setopt($curl, CURLOPT_HEADER, 0);

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie);
curl_setopt( $curl,CURLOPT_COOKIEFILE,  $cokie);

curl_setopt($curl, CURLOPT_POST, 1);

curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post));

$result = curl_exec($curl);

curl_close($curl);
echo $result;




?>

[隐藏样式|查看源码]


『回复列表(26|隐藏机器人聊天)』

1. 有飞信类的,不用你写了,百度PHPfetion
(/@Ta/2012-12-23 17:33//)

2. @15835038549
(/@Ta/2012-12-23 17:34//)

3. @ 我要学这个,不仅是为了功能
(/@Ta/2012-12-23 17:44//)

4. @老虎会游泳 虎哥帮个忙
(/@Ta/2012-12-23 18:15//)

5. 进去这个页面不要验证码: http://f.10086.cn/huc/user/portal/login.do?m=tologin&backurl=http%3A%2F%2Ff.10086.cn%2Fportal%2Fcscenter.action%3Fdo%3Dlayout 
(/@Ta/2012-12-23 19:10//)

6. @0001 多谢,但是有验证码该怎么写呢
(/@Ta/2012-12-23 19:17//)

7. @15835038549 破解图片验证码很难,我不会,,,,,
(/@Ta/2012-12-23 19:19//)

8. @15835038549,做一个PHP页面读取验证码并且输出,在页面上用<img>调用该页面把验证码交给用户辨认。注意你得保存验证码返回的Cookie,等用户提交登录表单时把这些Cookie一并发给服务器。
(/@Ta/2012-12-23 23:16//)

9. @老虎会游泳 我保存了验证码返回的cookie了,可是还不行,代码如上飞机直达表单页
(/@Ta/2012-12-23 23:48//)

10. @15835038549,你得在服务器端获取验证码,然后把验证码图片保存在你的服务器上,让用户显示你服务器上保存的验证码图片,而不是直接用飞信的(当你直接用飞信的地址时,飞信会给用户重新产生一个Cookie,那么这个验证码就相当于刷新了)。
为了防止图片被缓存,可以给图片加一个参数如'verifycode.png?t='.time()
(/@Ta/2012-12-24 00:05//)

11. @15835038549,你可以使用SESSION保存从验证码获得的Cookie。如果你不知道为什么要用SESSION,说明流程你没有理解。你可以看看/wap/?id=fetionlogin的源代码,或许会有启示。
(/@Ta/2012-12-24 00:08//)

12. http://hu60.cn/wap/0wap/addown.php/fetionlogin.php.gz
http://hu60.cn/wap/0wap/addown.php/jumpimg.php.gz
(/@Ta/2012-12-24 00:18//)

13. @老虎会游泳 确实有点不懂,你的程序我看了,但是没大看懂,里面用了你自己的类库,有些函数不知道是干什么的。。。现在有两个疑问:1.这cookie为什么可以用session保存。
(/@Ta/2012-12-24 06:38//)

14. @老虎会游泳 为什么表单前面改成这样也不行,我这次是取图片的时候保存的cookie,并且写到文件里了
$file=file_get_contents('http://f.10086.cn/im/login/login.action');
preg_match_all('/<img src="\/im\/systemimage\/verifycode(.*).png\?tp=im5"/Ui',$file,$match);
$cokie=dirname(__FILE__).'/cokie.ck';
@unlink($cokie);
$url='http://f.10086.cn/im/systemimage/verifycode'.$match[1][0].'.png?tp=im5';
$curl = curl_init($url);

curl_setopt($curl, CURLOPT_HEADER, 0);

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($curl, CURLOPT_COOKIEJAR, $cokie);

curl_setopt($curl, CURLOPT_POST, 1);

$img = curl_exec($curl);

curl_close($curl);
file_put_contents('img.png',$img);
(/@Ta/2012-12-24 06:40//)

15. @老虎会游泳 而且。。。验证码为什么不变了呢,永远是一张图片。。。明明每次都访问了呀,我用unlink()删掉图片文件也不行,后来在curl_exec()和file_put_contents()后加or die()测试程序也没停止报错,怎么个情况??啊啊啊啊啊啊啊 蛋疼
(/@Ta/2012-12-24 12:14//)

16. @15835038549,只要一个简单的修改就可以解决了:
<img src="地址?t=<?php echo time();?>"/>
你的浏览器对验证码进行了非正常的缓存,而解决问题的最简单办法就是每次都生成一个不同的地址。
(/@Ta/2012-12-24 23:24//)

17. 事实上飞信的验证码中im/systemimage/verifycode(.*).png里面的(.*)也是time()时间戳,目的就是防止用户浏览器非正常缓存图片。
(/@Ta/2012-12-24 23:27//)

18. @老虎会游泳 嗯,缓存问题解决了。但是验证码依然提示错误
(/@Ta/2012-12-25 02:55//)

19. @老虎会游泳 并且我的图片很模糊,没有原图清晰,这是什么原因?
(/@Ta/2012-12-25 03:48//)

下一页 1/2页,共26楼

回复需要登录

8月25日 01:14 星期一

本站由hu60wap6驱动

备案号: 京ICP备18041936号-1