zoukankan      html  css  js  c++  java
  • [PHP自动化-进阶]004.Snoopy VS CURL 模拟Discuz.net登陆

    引言:采集论坛第一步就是要模拟登陆,由于各个站点登录表单各不相同,验证方式又是多种多样,所以直接提交用户名密码到登录页面就比较繁琐。
    所以我们采用cookie来模拟登陆无疑是最佳捷径。

    今天我们要处理的是模拟Discuz.net登陆:

    切入主题


    下面,我们通过三步骤来实现模拟登录操作,1.获得登录cookie,2.模拟请求,3.跳至目标实际操作页面。

    准备工作

    首先,我们手工登录一下,记录一下cookie。

    dznet_cookietime=2592000;dznet_onlineusernum=7816;dznet_sid=QtlC87;dznet_auth=6bbeCQrzGv4eliNMLgU%2FlGZSpzbrsauGO1l0OBp6VQw5p0bcEg0xd4slYCM2ks%2FL0YCVYSO7XP2z8GMaxkPDUbXZCWft;checkpm=1

    (目前主流浏览都有插件查看cookie)

    P1.采用snoopy模拟登录

    // 载入类库
    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; 

    P2.采用curl模拟登录

    // 登录网址
    $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团队】 原文链接: http://www.cnblogs.com/superdo/p/4792805.html

     

  • 相关阅读:
    原创【cocos2d-x】CCMenuItemToggle 在lua中的使用
    SQL Server之LEFT JOIN、RIGHT LOIN、INNER JOIN的区别
    VS的IISExpress配置通过IP访问程序
    SQLServer执行大脚本文件时,提示“无法执行脚本没有足够的内存继续执行程序 (mscorlib)”
    jqGrid中multiselect: true 操作checkbox
    display:table的几个用法(元素平分宽度,垂直居中)
    ASP.NET中 前后台方法的相互调用
    AspxGridView使用手记
    大量文本框非空判断,如何提高灵活性?
    Mysql安装、配置、优化
  • 原文地址:https://www.cnblogs.com/superdo/p/4792805.html
Copyright © 2011-2022 走看看