在信息采集的时候,要采集的站点可能需要登录,这样使用简单的采集方式(例如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. $postfields = '';
  18. foreach ($vars as $key => $value){
  19. $postfields .= urlencode($key) . '=' . urlencode($value) . '&';
  20. }
  21. $params[CURLOPT_POST] = true;
  22. $params[CURLOPT_POSTFIELDS] = $postfields;
  23. //判断是否有cookie,有的话直接使用
  24. if (isset($_COOKIE['cookie_jar']) && ($_COOKIE['cookie_jar'] || is_file($_COOKIE['cookie_jar'])))
  25. {
  26. $params[CURLOPT_COOKIEFILE] = $_COOKIE['cookie_jar']; //这里判断cookie
  27. }
  28. else
  29. {
  30. $cookie_jar = tempnam($cookie_path, 'cookie'); //产生一个cookie文件
  31. $params[CURLOPT_COOKIEJAR] = $cookie_jar; //写入cookie信息
  32. setcookie('cookie_jar', $cookie_jar); //保存cookie路径
  33. }
  34. curl_setopt_array($ch, $params); //传入curl参数
  35. $content = curl_exec($ch); //执行
  36. echo '
  37. ';
  38. echo $content; //输出登录结果
  39. /*
  40. *如果输出的结果是Json格式则用下面方法得到所需内容
  41. *$obj = json_decode($content);
  42. *print_r($obj->{'所需内容'}) ;
  43. */
  44. /*
  45. //---------登录成功后再次请求其他地址,如果有多个可以循环执行---------
  46. echo '
  47. ';
  48. $nexturl = 'http://****.com/test';
  49. $params[CURLOPT_URL] = $nexturl;
  50. $params[CURLOPT_POSTFIELDS] = '';
  51. curl_setopt_array($ch, $params); //传入curl参数
  52. $content = curl_exec($ch); //执行
  53. echo $content; //输出请求结果
  54. //-------------------------------------------------
  55. */
  56. curl_close($ch); //关闭连接
  57. ?>

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

    1. $params[CURLOPT_SSL_VERIFYPEER] = false;
    2. $params[CURLOPT_SSL_VERIFYHOST] = false;

使用CURL进行模拟登录的更多相关文章

  1. PHP cURL实现模拟登录与采集使用方法详解教程

    来源:http://www.zjmainstay.cn/php-curl 本文将通过案例,整合浏览器工具与PHP程序,教你如何让数据 唾手可得 . 对于做过数据采集的人来说,cURL一定不会陌生.虽然 ...

  2. php中CURL实现模拟登录并采集数据

    在php中采集我们用的是简单的采集方式(例如file_get_contents)就无法做到了,但是如果想模拟登录用户并采集利用它就没办法了,我们可利用CURL函数来实现模拟登录并采集数据 这里要说一些 ...

  3. curl怎么模拟登录进行采集

    前几天公司需要模拟登录,从网上找了一下代码,结合谷歌浏览器,进行模拟账号密码进行登录 用谷歌浏览器进行抓包操作,获得登录用参数, 下面上干货: <?php /** * 主要获取登录成功的cook ...

  4. php使用CURL进行模拟登录采集数据

    <?php $cookie_path = './'; //设置cookie保存路径 //-----登录要提交的表单数据--------------- $vars['username'] = '张 ...

  5. CURL的模拟登录和抓取页面

    <?php $curl = curl_init();// 初始化 // 准备提交的表单数据之账号和密码.(这个是根据表单选项来的) $data = "_username=6049892 ...

  6. 模拟登录神器之PHP基于cURL实现自动模拟登录类

    一.构思 从Firefox浏览器拷贝cURL命令(初始页.提交.提交后) 自动分析curl形成模拟登录代码 默认参数:ssl/302/gzip 二.实现 接口 (一)根据curl信息执行并解析结果 p ...

  7. PHP cURL应用实现模拟登录与采集使用方法详解

    对于做过数据采集的人来说,cURL一定不会陌生.虽然在PHP中有file_get_contents函数可以获取远程链接的数据,但是它的可控制性太差了,对于各种复杂情况的采集情景,file_get_co ...

  8. PHP简单模拟登录功能实例分享

    1.curl实现模拟登录的代码,(只是实现服务器与服务器建立会话,其实并没有在客户端与服务器之间建立会话) <?php $cookie_jar = tempnam('./tmp','cookie ...

  9. PHP cURL 使用cookie 模拟登录

    cURL是什么 cURL: http://php.net/manual/zh/book.curl.php PHP 支持 Daniel Stenberg 创建的 libcurl 库,能够连接通讯各种服务 ...

随机推荐

  1. Cocos Creator cc.Event点击触摸事件详解

    cc.Event事件请不要直接创建 cc.Event 对象,因为它是一个抽象类,请创建 cc.Event.EventCustom 对象来进行派发. cc.Class({extends: cc.Comp ...

  2. CSS 字体效果

    text-shadow还没有出现时,大家在网页设计中阴影一般都是用photoshop做成图片,现在有了css3可以直接使用text-shadow属性来指定阴影.这个属性可以有两个作用,产生阴影和模糊主 ...

  3. 为什么入门首选C语言

    对于大部分程序员,C语言是学习编程的第一门语言,很少有不了解C的程序员. C语言除了能让你了解编程的相关概念,带你走进编程的大门,还能让你明白程序的运行原理,比如,计算机的各个部件是如何交互的,程序在 ...

  4. IT人员如何开好站立会议

    一.来由 软件开发的过程却又是一个离不开协作.沟通的过程.一个缺乏良好协作,沟通.理解和目标一致的软件团队,是很难高质高效的交付的. 敏捷的众多实践中,有一个为了提升团队协作的经典实践:站立会议 二. ...

  5. 字典排序 sorted

    a = {6:2,8:0,1:4,-5:6,99:11,4:22} print( sorted(a.items()) ) #默认安照key排序的print( sorted(a.items(),key= ...

  6. Python 两个星号(**)的 参数

    将参数以字典的形式导入

  7. java框架注意

    struts2 数据类型不匹配时会return "input" <result name="input">/WEB-INF/index.jsp< ...

  8. 使用Angular2的Http发送AJAX请求

    使用Angular2的Http发送AJAX请求 Angular的文档并不详细,甚至API文档也有一些错误.经过查阅资料并经大量实验,终于明确了Angular的Http发送Ajax请求的方式方法.本文描 ...

  9. 算法(第四版)C# 习题题解——1.2

    写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 这一节内容可能会用到的库文件有 ...

  10. (转)Awesome Human Pose Estimation

    Awesome Human Pose Estimation 2018-10-08 11:02:35 Copied from: https://github.com/cbsudux/awesome-hu ...