public function login_cbg(){
$cookieVerify = dirname(__FILE__)."/cookie.cookie";
$cookieSuccess = dirname(__FILE__)."/cookie_2.cookie";
if(!$_POST){
// 获取cookie并保存
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "http://xyq.cbg.163.com/cgi-bin/login.py?next_url=%2Fcgi-bin%2Fequipquery.py%3Fact%3Dbuy_show_by_ordersn%26ordersn%3D22_1458634981_24342109%26server_id%3D9&server_id=9&act=show_anon_auth_page");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieVerify);
$rs = curl_exec($ch);
curl_close($ch); 
 
// 带上cookie抓取验证码,必须带上cookie,否则验证码不对应
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "http://xyq.cbg.163.com/cgi-bin/create_validate_image.py?");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieVerify);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieVerify);
$rs = curl_exec($ch);
// 把验证码在本地生成,二次拉取验证码可能无法通过验证
@file_put_contents("verifycode.jpg",$rs);
curl_close($ch); 
// 手工验证码表单
echo "<form action=\"\" method=\"post\"><input type=\"text\" name=\"vcode\"><img src=\"verifycode.jpg\" /><br><input type=\"submit\" value=\"ok\"></form>";
}else{
// 登录
$ch = curl_init(); 
// 用户名\密码 
$user = "abc123"; 
$pass = "123456";
$verify = $_POST["vcode"];
$url = "http://xyq.cbg.163.com/cgi-bin/login.py"; 
$next_url="/cgi-bin/equipquery.py?act=buy_show_by_ordersn&ordersn=22_1458634981_24342109&server_id=9";
 
// 返回结果存放在变量中,不输出 
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieVerify);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch,CURLOPT_HTTPGET,1);
curl_setopt($ch,CURLOPT_REFERER,"http://xyq.cbg.163.com/cgi-bin/login.py?next_url=%2Fcgi-bin%2Fequipquery.py%3Fact%3Dbuy_show_by_ordersn%26ordersn%3D22_1458634981_24342109%26server_id%3D9&server_id=9&act=show_anon_auth_page"); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); 
curl_setopt($ch, CURLOPT_POST, true); 
$fields_post = array("act"=>'do_anon_auth', 
"next_url"=>$next_url, 
"server_id"=>9,
"image_value"=>$verify); 
$headers_login = array("User-Agent" => "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.108 Safari/537.36"); 
// $fields_string = ""; 
// foreach($fields_post as $key => $value){ 
// $fields_string .= $key . "=" . $value . "&"; 
// } 
// $fields_string = rtrim($fields_string , "&"); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers_login); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieSuccess);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($fields_post)); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$result= curl_exec($ch);
$result=mb_convert_encoding($result,'utf-8','utf-8,ASCII,GBK,GB2312');
curl_close($ch);
$this->write_file($result);
//var_dump($result);

}

}

public function write_file($content){
$path=$_SERVER['DOCUMENT_ROOT'];
$path=$path.'/application/views/contents';
if(!file_exists($path)){
mkdir($path);
}
$myfile=fopen($path.'/mh.php','w');
fwrite($myfile, $content);
fclose($myfile);
}

原理就是第一次登陆时候获取的cookie,里面包含这验证码信息。使用这个cookie去获取验证码,然后手动输入,然后post给网站,就登陆成功了。(http是无状态的)

之后输出view/mh.php文件就能看到得到整个文件,至于显示的出错的原因:

js文件内有些返回值是相对路径,那么get的路径就会错误,例如:如果我的本地配置域名是www.first.com,那么get的相对路径默认是我本地域名了,会导致get数据出错。解决办法是将本地域名配置成跟藏宝阁同一个域名,这样就会省去很多改动。

还有一个显示乱码问题,看了很多天js代码,没有发现错误。最后,是将js文件的拷到本地,使用本地的js文件,这样中文显示乱码就解决掉了,原因还没有想通。

抓取梦幻西游藏宝阁数据,php过验证相关推荐

  1. Fiddler 详尽教程与抓取移动端数据包

    转载自:http://blog.csdn.net/qq_21445563/article/details/51017605 阅读目录 1. Fiddler 抓包简介 1). 字段说明 2). Stat ...

  2. php curl_setopt抓取内容,PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)

    通过curl_setopt()函数可以方便快捷的抓取网页(采集很方便),curl_setopt 是php的一个扩展库 使用条件:需要在php.ini 中配置开启.(PHP 4 >= 4.0.2) ...

  3. 用python通过selenium自动化测试抓取天猫店铺数据

    用python通过selenium自动化测试抓取天猫店铺数据 运行的环境在win10,软件用的是vscode.大家平常在抓取天猫店铺的时候登陆后会需要验证,我的方法是通过谷歌插件跳过天猫的登陆. 首先 ...

  4. vba 提取 json某个值_VBA利用IE,抓取解禁股票数据

    大家好,我们今日讲解"VBA信息获取与处理"教程中第九个专题"利用IE抓取网络数据"的第三节"利用IE,抓取解禁股票数据",这个专题是非常有 ...

  5. Wireshark网络抓包之抓取聊天网络数据包

    一.Wireshark 1. Wireshark简介 Wireshark(前称Ethereal)是一个网络封包分析软件.网络封包分析软件的功能是截取网络封包,并尽可能显示出最为详细的网络封包资料.Wi ...

  6. wireshark怎么抓apk 包_图解如何抓取手机的数据封包「手机抓包技术详解」

    通常我们主要抓取手机等移动设备的三种数据封包:TCP.HTTP.HTTPS.本文我们主要通过图文详细讲解使用wireshark抓取手机的tcp数据包,使用Fiddler抓取手机的HTTP.HTTPS数 ...

  7. Java版 QQ空间自动登录无需拷贝cookie一天抓取30WQQ说说数据流程分析【转】

    Java版 QQ空间自动登录无需拷贝cookie一天抓取30WQQ说说数据&流程分析 QQ空间说说抓取难度比较大,花了一个星期才研究清楚! 代码请移步到GitHub GitHub地址:http ...

  8. 微信好友大揭秘,使用Python抓取朋友圈数据,通过人脸识别全面分析好友,一起看透你的“朋友圈”...

    微信:一个提供即时通讯服务的应用程序,更是一种生活方式,超过数十亿的使用者,越来越多的人选择使用它来沟通交流. 不知从何时起,我们的生活离不开微信,每天睁开眼的第一件事就是打开微信,关注着朋友圈里好友 ...

  9. 如何使用浏览器控制台通过JavaScript抓取并将数据保存在文件中

    by Praveen Dubey 通过Praveen Dubey 如何使用浏览器控制台通过JavaScript抓取并将数据保存在文件中 (How to use the browser console ...

最新文章

  1. Comparable和Comparator的比较
  2. 计算机考试不用输入扩展名吗,本周末的 计算机等级考试,如果不想考0分,一定要花2分钟看完...
  3. 中心频率和一些概念解释
  4. CentOS 查看系统 CPU 个数、核心数、线程数
  5. dockerfile centos+jdk+时区设置
  6. 验证车牌号码是否有效
  7. Python:实现xlsx文件与csv文件之间相互转换
  8. BugKuCTF WEB 变量1
  9. GMQ稳定币为区块链资产在金融市场的进一步应用打开了一扇大门
  10. spring-boot注解详解(二)
  11. 前端学习(503):水平居中布局得第三种方式的优缺点
  12. c ++atoi函数_atoi()函数以及C ++中的示例
  13. 【手势识别】基于matlab GUI石头剪刀布【含Matlab源码 774期】
  14. 从头尝试小米手机root
  15. matlab中注释多行
  16. 最强大脑-星际迷航-JQuery 版本
  17. 木瓜从林。。。。。。。。。。。。。。。。。
  18. 小公司如何做项目管理流程
  19. 新年财报“开门红”,谷歌的疫情复苏红利还能吃多久?
  20. 如何从0到1组建敏捷团队?

热门文章

  1. maple化简_在线测试(Maple TA)使用须知yx - 课程中心.PDF
  2. PHP公司高级面试题2017,php面试题2017
  3. 数据库课程设计【5】-----答辩总结
  4. Python类型转换——数据类型转换函数大全
  5. android动态改变布局,Android 动态添加布局的两种方式
  6. 使用python连接clickhouse并发送邮件
  7. QT:复杂结构体不同窗口间传递
  8. linux关闭防火墙(临时/永久)
  9. optimizer.step()代表什么意思
  10. apple configurator 2 提取ipa文件