在信息采集的时候,要采集的站点可能需要登录,这样使用简单的采集方式(例如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. 动物管理员--zooKeeper-01

    ZooKeeper集群角色介绍: 最典型集群模式:Master/Slave 模式(主备模式).在这种模式中,通常 Master 服务器作为主服务器提供写服务,其他的 Slave 服务器从服务器通过异步 ...

  2. JS获取盒模型对应的宽高

    ## 获取内联样式宽高 只能获取内联设置的样式,在style或者.css文件中设置的无法获取 let div = document.querySelect('.test'); let width = ...

  3. JaCoCo在Tomcat服务器上监控代码覆盖率的使用方法

    简介 Jacoco是一个开源的覆盖率工具.Jacoco可以嵌入到Ant .Maven中,并提供了EclEmma Eclipse插件,也可以使用JavaAgent技术监控Java程序.很多第三方的工具提 ...

  4. ACM-ICPC 2018 南京赛区网络预赛 Solution

    A. An Olympian Math Problem cout << n - 1 << endl; #include <bits/stdc++.h> using ...

  5. SVN拉分支,合并分支

    前提是:本地已安装SVN,且在SVN中新建好branch和tag目录 拉分支: 把svn内容下载到本地,然后右键TortoiseSVN-->Branch/tag... 上图中红框选择存放的路径, ...

  6. sass用法快速入门

    1.@mixin用法 (混合样式)    2.定义变量用$  (可作为全局变量使用) 命名规范 —— 遵守语义化命名:lg-大号.md-中号.base-基本号.sm-小号.mini-超小号 $font ...

  7. 20165215 2017-2018-2《Java程序设计》课程总结

    20165215 2017-2018-2<Java程序设计>课程总结 一.每周作业链接汇总 预备作业1:我期望的师生关系:令我记忆深刻的老师,期望的师生关系,本学期的学习规划. 预备作业二 ...

  8. 在 Tomcat 中自定义 404 页面(简单配置)

      打开 Tomcat 中的 web.xml,(tomcat/conf/web.xml) 添加如下代码: <error-page>  <error-code>404</e ...

  9. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

  10. Codeforces 17E Palisection - Manacher

    题目传送门 传送点I 传送点II 传送点III 题目大意 给定一个串$s$询问,有多少对回文子串有交. 好像很简单的样子. 考虑能不能直接求,感觉有点麻烦.因为要考虑右端点在当前回文子串内还有区间包含 ...