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

     

  • 相关阅读:
    CSUFT 1002 Robot Navigation
    CSUFT 1003 All Your Base
    Uva 1599 最佳路径
    Uva 10129 单词
    欧拉回路
    Uva 10305 给任务排序
    uva 816 Abbott的复仇
    Uva 1103 古代象形文字
    Uva 10118 免费糖果
    Uva 725 除法
  • 原文地址:https://www.cnblogs.com/superdo/p/4790910.html
Copyright © 2011-2022 走看看