zoukankan      html  css  js  c++  java
  • [PHP自动化-进阶]001.CURL模拟登录并采集数据

    引言:PHP可以通过libcurl实现模拟登录,提交数据,违法乱纪,烧杀抢虐等等事项。

    简单说明一下"libcurl",补一下脑:

    • libcurl目前支持http、https、ftp、gopher、telnet、dict、file和ldap协议。
    • libcurl同时也支持 HTTPS认证、HTTP POST、HTTP PUT、 FTP 上传(这个也能通过PHP的FTP扩展完成)、HTTP 基于表单的上传、代理、cookies和用户名+密码的认证。

    使用curl可以实现Get和Post请求的方法,伪造来路IP等等功能。。。

    切入主题


    这一讲,我们为大家准备了如何利用libcurl进行"模拟登录用户并采集数据"。

    开启说明

    默认情况下,PHP的CURL功能是没有开启的,所以你要自己去开启这个功能,需要如下操作:

    在php.ini中把  ;extension= php_curl.dll 前面的  " ; " 号去掉!!!

    单刀直入

    直接上代码,代码注释已经很详细!各位看官请看下面:

     步骤1:

    创建一个具有唯一文件名的临时文件,用于cookie信息的存储。 (若成功,则返回新的临时文件名。若失败,则返回 false。)

    // 指定Cookie保存文件
    $cookie_file
    = tempnam('./temp', 'cookie');

     步骤2:

     初始化一个curl对象,并同时指定要请求的网址,请求携带数据。

    // 请求网址
    $url  = "http://www.phpyu.com/index.php?action=login";
    // 请求网址
    $data = "user=××&pw=××";;
    // 初始化CURL对象 $ch = curl_init($url);

     步骤3:

     设置curl对象参数。

    // 设置返回响应头信息[无](说明:该设置通常是需要加上的,用于制作下一次请求的肥料。)
    curl_setopt($ch, CURLOPT_HEADER, 0);
    // 设置不输出到浏览器(说明:直接返回字符串,否则直接输出)
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    // 设置请求为通用POST(说明:如果想PHP去做一个正规的HTTP POST,设置属性为一个非零值。这个POST是普通的 application/x-www-from-urlencoded 类型,多数被HTML表单使用。) 
    curl_setopt($ch, CURLOPT_POST, 1); // 设置请求携带数据
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // 设置Cookie保存文件(说明:把返回来的cookie信息保存在$cookie_file文件中) curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
    // 设置自动解析编码(说明:如果出现乱码问题则加上此句)
    curl_setopt($ch, CURLOPT_ENCODING, '');

     步骤4:

     执行请求,并关闭。

    // 执行请求
    curl_exec($ch);
    // 关闭连接
    curl_close($ch);

     上面已经完成了模拟登录的过程

    偷龙转凤

    在模拟实现登录之后,下面要做的就是进入实际要操作的页面(记得你现在已经登录了,你应该把登录的凭证cookie保存了起来。)

    // 请求网址
    $url="http://www.phpyu.com/admin/××";
    // 初始化CURL对象
    $ch = curl_init($url);
    // 设置请求头[无](说明:如果需要把头包含在输出中,则设置属性为一个非零值。)
    curl_setopt($ch, CURLOPT_HEADER, 0);
    // 设置直接输出到浏览器(说明:0:表示直接输出 1:返回字符串)
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
    // 设置上传Cookie内容(说明:该内容引用某个文件)
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
    // 执行请求
    curl_exec($ch);
    // 关闭连接
    curl_exec($ch);

    综合示例1则


    Mark一下,大家有兴趣可以看看。

    <?php
    
    // 常量[Cookie保存路径]
    define("COOKIE_PATH", './');
    
    
    // 请求网址
    $url = 'http://****.com/login';
    // 请求方式
    $method_post = true;
    
    
    // 初始化CURL对象
    $ch = curl_init();
    // 设置网址
    $params[CURLOPT_URL] = $url; 
    // 设置返回响应头信息[有]
    $params[CURLOPT_HEADER] = true;
    // 设置不输出到浏览器(说明:直接返回字符串,否则直接输出)
    $params[CURLOPT_RETURNTRANSFER] = true;
    // 设置允许重定向
    $params[CURLOPT_FOLLOWLOCATION] = true;
    // 设置浏览器引擎
    $params[CURLOPT_USERAGENT] = 'Mozilla/5.0 (Windows NT 5.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1';
    // 设置请求方式
    $params[CURLOPT_POST] = true;
    // 设置请求数据
    $vars['username'] = '张三';
    $vars['password'] = '123';
    $data = '';
    foreach ($vars as $key => $value) {
        $data.= urlencode($key) . '=' . urlencode($value) . '&';
    }
    $params[CURLOPT_POSTFIELDS] = $data;
    
    
    // 设置Cookie
    // 判断是否有cookie,有的话直接使用
    if (isset($_COOKIE['cookie_jar']) && ($_COOKIE['cookie_jar'] || is_file($_COOKIE['cookie_jar']))) {
        $params[CURLOPT_COOKIEFILE] = $_COOKIE['cookie_jar'];
    } else {
        // 产生一个cookie文件
        $cookie_jar = tempnam(COOKIE_PATH, 'cookie');
        // 写入cookie信息
        $params[CURLOPT_COOKIEJAR] = $cookie_jar;
        // 保存cookie路径
        setcookie('cookie_jar', $cookie_jar);
    }
    
    // 设置curl参数集
    curl_setopt_array($ch, $params);
    // 执行请求
    $html = curl_exec($ch);
    // 输出结果
    echo $html;
    // 关闭连接
    curl_close($ch);
    
    ?>

     注: 如果遇到无法请求https站点的情况,可能是因为无法验证证书或者域名,只要加下下列两句话即可。

    // 跳过证书检查 

    $params[CURLOPT_SSL_VERIFYPEER] = false;

    // 从证书中检查SSL加密算法是否存在

    $params[CURLOPT_SSL_VERIFYHOST] = false;

    未完待续……。

     

    本站文章为 宝宝巴士 SD.Team 原创,转载务必在明显处注明:(作者官方网站: 宝宝巴士 
    转载自【宝宝巴士SuperDo团队】 原文链接: http://www.cnblogs.com/superdo/p/4790910.html

     

  • 相关阅读:
    LL(1)文法的判断,递归下降分析程序
    消除左递归
    DFA最小化,语法分析初步
    非确定的自动机NFA确定化为DFA
    正规式、正规文法与自动机
    第03组 Alpha事后诸葛亮
    第03组 Alpha冲刺(4/4)
    第03组 Alpha冲刺(3/4)
    第03组 Alpha冲刺(2/4)
    第03组 Alpha冲刺(1/4)
  • 原文地址:https://www.cnblogs.com/superdo/p/4790910.html
Copyright © 2011-2022 走看看