利用php的cURL实现模拟登录,抓取页面数据等功能

前沿技术

  cURL是php内置的一个很有用的函数:

  cURL可以使用URL的语法模拟浏览器来传输数据,因为它是模拟浏览器,因此它同样多种协议,FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP等协议都可以很好的,包括一些:HTTPS认证,HTTP POST方法,HTTP PUT方法,FTP上传,keyberos认证,HTTP上传,代理服务器,cookies,用户名/密码认证,下载文件断点续传,上传文件断点续传,http代理服务器管道,甚至它还IPv6,scoket5代理服务器,通过http代理服务器上传文件到FTP服务器等等。这就是我们为什么要使用cURL的原因!

  今天模拟登录安锋游戏, 来获取最新活动:

  上代码:

  <?php

  //模拟登录

  function login_post($url, $cookie, $post) {

   $curl = curl_init();//初始化curl模块

   curl_setopt($curl, CURLOPT_URL, $url);//登录提交的地址

   curl_setopt($curl, CURLOPT_HTTPHEADER, [X-Requested-With:XMLHttpRequest]);

   curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//是否自动显示返回的信息

   curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie); //设置Cookie信息保存在指定的文件中

   curl_setopt($curl, CURLOPT_POST, 1);//post方式提交

   curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post));//要提交的信息

   curl_exec($curl);//执行cURL

   curl_close($curl);//关闭cURL资源,并且释放系统资源

  }

  function get_content($url, $cookie) {

   $ch = curl_init();

   curl_setopt($ch, CURLOPT_URL, $url);

   curl_setopt($ch, CURLOPT_HTTPHEADER, [X-Requested-With:XMLHttpRequest]);

   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

   curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); //读取cookie

   $rs = curl_exec($ch); //执行cURL抓取页面内容

   curl_close($ch);

   return $rs;

  }

  $url = http://www.anfeng.cn/ajax/users/login;

  $cookie = ./cookie.txt;

  $post = [

   username=>user123,

   password=>************

  ];

  //模拟登录

  login_post($url, $cookie, $post);

  $content = get_content(http://www.anfeng.cn/activity/, $cookie);

  //匹配出所有活动

  preg_match_all (/<h3><a\s*href=[^>]+>([^>]+)</a>/, $content, $result);

  foreach ($result[0] as $k => $v) {

   $result[0][$k] = str_replace(<h3><a href=", <h3><a href="http://www.anfeng.cn, $v);

   echo $result[0][$k];

  }

  运行这段代码可以获得图片中的活动列表

  抓取得到的活动列表

标签: 前沿技术