[PHP自动化-进阶]004.Snoopy VS CURL 模拟Discuz.net登陆
2015-09-08 20:11
781 查看
引言:采集论坛第一步就是要模拟登陆,由于各个站点登录表单各不相同,验证方式又是多种多样,所以直接提交用户名密码到登录页面就比较繁琐。
所以我们采用cookie来模拟登陆无疑是最佳捷径。
今天我们要处理的是模拟Discuz.net登陆:
对象:http://www.discuz.net
账号:ac
密码:123456
[b]切入主题[/b]
下面,我们通过三步骤来实现模拟登录操作,1.获得登录cookie,2.模拟请求,3.跳至目标实际操作页面。
[b]准备工作
[/b]
首先,我们手工登录一下,记录一下cookie。
dznet_cookietime=2592000;dznet_onlineusernum=7816;dznet_sid=QtlC87;dznet_auth=6bbeCQrzGv4eliNMLgU%2FlGZSpzbrsauGO1l0OBp6VQw5p0bcEg0xd4slYCM2ks%2FL0YCVYSO7XP2z8GMaxkPDUbXZCWft;checkpm=1
(目前主流浏览都有插件查看cookie)
[b]P1.采用snoopy模拟登录[/b]
// 载入类库 include("snoopy.php"); // 实际对象 $snoopy = new Snoopy; // 设置浏览器引擎 // (说明:是浏览器信息,前面你用什么浏览器查看Cookie,就用那个浏览器的信息[PS: $_SERVER可以查看到浏览器的信息]) $snoopy->agent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; TheWorld)"; // 设置来源页面 $snoopy->referer = "http://www.discuz.net/"; // 设置Cookie $snoopy->rawheaders["COOKIE"]= "dznet_cookietime=2592000;dznet_onlineusernum=7816;dznet_sid=QtlC87;dznet_auth=6bbeCQrzGv4eliNMLgU%2FlGZSpzbrsauGO1l0OBp6VQw5p0bcEg0xd4slYCM2ks%2FL0YCVYSO7XP2z8GMaxkPDUbXZCWft;checkpm=1"; // 抓取发贴页面 $snoopy->fetch("http://www.discuz.net/post.php?action=newthread&fid=2&extra=page%3D1"); // 输出页面内容 echo $snoopy->results;
[b]P2.采用curl模拟登录[/b]
// 登录网址 $url = "http://www.discuz.net/"; // 浏览器引擎 $useragent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; TheWorld)"; // Cookie $cookie = "dznet_cookietime=2592000;dznet_onlineusernum=7816;dznet_sid=QtlC87;dznet_auth=6bbeCQrzGv4eliNMLgU%2FlGZSpzbrsauGO1l0OBp6VQw5p0bcEg0xd4slYCM2ks%2FL0YCVYSO7XP2z8GMaxkPDUbXZCWft;checkpm=1"; // 初始化CURL对象 $ch= curl_init(); // 设置请求URL curl_setopt($ch, CURLOPT_URL, $url); // 设置Cookie curl_setopt($ch, CURLOPT_COOKIE, $cookie); // 设置来源页面 curl_setopt($ch, CURLOPT_REFERER, "http://www.discuz.net/index.php"); // 设置返回响应头信息[无](说明:该设置通常是需要加上的,用于制作下一次请求的肥料。) curl_setopt($ch, CURLOPT_HEADER, false); // 设置不输出到浏览器(说明:直接返回字符串,否则直接输出) curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 设置浏览器引擎 curl_setopt($ch, CURLOPT_USERAGENT, $useragent); // 执行请求 curl_exec($ch); // 获得页面内容 $tempCn = curl_multi_getcontent($ch); // 关闭连接 curl_close($ch); // 输出页面内容 echo $tempCn;
今天先讲到这里吧!
未完待续……。
本站文章为 宝宝巴士 SD.Team 原创,转载务必在明显处注明:(作者官方网站: 宝宝巴士 )
转载自【宝宝巴士SuperDo团队】 原文链接: /article/6669171.html
相关文章推荐
- 数据存储:ContentProvider获取联系人
- [Swoole入门]-Ubuntu环境下安装Swoole扩展
- 数据存储详解(四)及四大组件之一 之--->ContentProvider(内容提供者)
- ThinkPHP中通过URL重写隐藏应用的入口文件index.php的相关服务器的配置
- php 相对路径中 ./ 与../的区别
- PHP表单案例
- php表单输入验证
- 使用PHP顶替JS有趣DOM
- php的Judy Array
- ThinkPHP函数详解:M方法
- php模式设计之 中介者模式
- ThinkPHP函数详解:D方法
- ThinkPHP框架使用Smarty模板引擎
- ThinkPHP函数详解:I方法
- ThinkPHP3.2.3 使用常量BUILD_CONTROLLER_LIST无法生成Controller
- Yii Framework 开发教程(3) 为应用添加日志
- php判断数据库是否连接成功的测试例子
- 调试Crypt_GPG的过程
- PHP 中session_start函数
- [php5.6]用mysqli连接SAE数据库