使用CURL进行模拟登录

来源:互联网 发布:使命召唤12优化怎么样 编辑:程序博客网 时间:2024/06/13 09:28

        在信息采集的时候,要采集的站点可能需要登录,这样使用简单的采集方式(例如file_get_contents)就无法做到了,我们可以利用PHP的CURL扩展库来进行模拟登录,下面给出代码示例:

  1. <?php
  2.         $cookie_path './'//设置cookie保存路径

  3.         //-----登录要提交的表单数据---------------
  4.         $vars['username'] = '张三';
  5.          $vars['pwd'] = '123';
  6.          //-------------------------------------
  7.         $method_post true;
  8.         //登录提交的url地址(表单中的action的绝对地址)
  9.          $url 'http://****.com/login';
  10.         //----------------------------

  11.          $ch curl_init();
  12.         $params[CURLOPT_URL] = $url;    //请求url地址
  13.         $params[CURLOPT_HEADER] = true//是否返回响应头信息
  14.         $params[CURLOPT_RETURNTRANSFER] = true//是否将结果返回
  15.         $params[CURLOPT_FOLLOWLOCATION] = true//是否重定向
  16.         $params[CURLOPT_USERAGENT] = 'Mozilla/5.0 (Windows NT 5.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1';
  17.     
  18.         $postfields '';
  19.         foreach ($vars as $key => $value){
  20.             $postfields .= urlencode($key) . '=' urlencode($value) . '&';  
  21.         }
  22.         
  23.         $params[CURLOPT_POST] = true;
  24.         $params[CURLOPT_POSTFIELDS] = $postfields;
  25.         
  26.         //判断是否有cookie,有的话直接使用
  27.         if (isset($_COOKIE['cookie_jar']) && ($_COOKIE['cookie_jar'] || is_file($_COOKIE['cookie_jar'])))
  28.         {
  29.             $params[CURLOPT_COOKIEFILE] = $_COOKIE['cookie_jar']; //这里判断cookie
  30.         }
  31.         else
  32.         {
  33.             $cookie_jar tempnam($cookie_path'cookie'); //产生一个cookie文件
  34.             $params[CURLOPT_COOKIEJAR] = $cookie_jar//写入cookie信息
  35.             setcookie('cookie_jar'$cookie_jar); //保存cookie路径
  36.         }
  37.         curl_setopt_array($ch$params); //传入curl参数
  38.         $content curl_exec($ch); //执行

  39.         echo '
    ';
  40.         echo $content//输出登录结果
  41.         /*
  42.         //---------登录成功后再次请求其他地址,如果有多个可以循环执行---------
  43.         echo '
    ';
  44.         $nexturl = 'http://****.com/test';
  45.         $params[CURLOPT_URL] = $nexturl;
  46.         $params[CURLOPT_POSTFIELDS] = '';
  47.         curl_setopt_array($ch, $params); //传入curl参数
  48.         $content = curl_exec($ch); //执行
  49.         echo $content; //输出请求结果
  50.         //-------------------------------------------------
  51.         */
  52.         curl_close($ch); //关闭连接
  53.         
  54. ?>

注:如果遇到无法请求https站点的情况,可能是因为无法验证证书或者域名,只要在curl_setopt_array前增加以下两项就可以了:

$params[CURLOPT_SSL_VERIFYPEER] = false;

$params[CURLOPT_SSL_VERIFYHOST] = false;


0 0