php curl 模拟登录并获取数据实例详解


Posted in PHP onDecember 22, 2016

PHP的curl()在抓取网页的效率方面是比较高的,而且支持多线程,而file_get_contents()效率就要稍低些,当然,使用curl时需要开启下curl扩展。

代码实战

先来看登录部分的代码:

//模拟登录 
function login_post($url, $cookie, $post) { 
  $curl = curl_init();//初始化curl模块 
  curl_setopt($curl, CURLOPT_URL, $url);//登录提交的地址 
  curl_setopt($curl, CURLOPT_HEADER, 0);//是否显示头信息 
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 0);//是否自动显示返回的信息 
  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资源,并且释放系统资源 
}

函数login_post()首先初始化curl_init(),然后使用curl_setopt()设置相关选项信息,包括要提交的url地址,保存的cookie文件,post的数据(用户名和密码等信息),是否返回信息等等,然后curl_exec执行curl,最后curl_close()释放资源。注意PHP自带的http_build_query()可以将数组转换成相连接的字符串。

接下来如果登录成功后,我们要获取登录成功后的页面信息。

//登录成功后获取数据 
function get_content($url, $cookie) { 
  $ch = curl_init(); 
  curl_setopt($ch, CURLOPT_URL, $url); 
  curl_setopt($ch, CURLOPT_HEADER, 0); 
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
  curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); //读取cookie 
  $rs = curl_exec($ch); //执行cURL抓取页面内容 
  curl_close($ch); 
  return $rs; 
}

函数get_content()中也是先初始化curl,然后设置相关选项,执行curl,释放资源。其中我们设置CURLOPT_RETURNTRANSFER为1即自动返回信息,而CURLOPT_COOKIEFILE可以读取到登录时保存的cookie信息,最后将页面内容返回。

我们的最终目的是要获取到模拟登录后的信息,也就是只有正常登录成功后才能获取的有用信息。接下来我们以登录开源中国的移动版为例,看看如何抓取到登录成功后的信息。

//设置post的数据 
$post = array ( 
  'email' => 'oschina账户', 
  'pwd' => 'oschina密码', 
  'goto_page' => '/my', 
  'error_page' => '/login', 
  'save_login' => '1', 
  'submit' => '现在登录' 
); 
 //登录地址 $url = "http://m.oschina.net/action/user/login"; //设置cookie保存路径 $cookie = dirname(__FILE__) . '/cookie_oschina.txt'; //登录后要获取信息的地址 $url2 = "http://m.oschina.net/my"; //模拟登录 
login_post($url, $cookie, $post); //获取登录页的信息 $content = get_content($url2, $cookie); //删除cookie文件 
@ unlink($cookie); //匹配页面信息 $preg = "/<td class='portrait'>(.*)<\/td>/i"; 
preg_match_all($preg, $content, $arr); $str = $arr[1][0]; //输出内容 echo $str;

使用总结

1、初始化curl;

2、使用curl_setopt设置目标url,和其他选项;

3、curl_exec,执行curl;

4、执行后,关闭curl;

5、输出数据。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

PHP 相关文章推荐
php zend 相对路径问题
Jan 12 PHP
php 获取当前访问的url文件名的方法小结
Feb 08 PHP
PHP高自定义性安全验证码代码
Nov 27 PHP
php中日期加减法运算实现代码
Dec 08 PHP
php addslashes 利用递归实现使用反斜线引用字符串
Aug 05 PHP
PHP自动重命名文件实现方法
Nov 04 PHP
初识laravel5
Mar 02 PHP
php实现字符串首字母转换成大写的方法
Mar 17 PHP
PHP中的traits简单使用实例
May 13 PHP
php把数组值转换成键的方法
Jul 13 PHP
PHP策略模式定义与用法示例
Jul 27 PHP
TP5框架页面跳转样式操作示例
Apr 05 PHP
使用PHP连接多种数据库的实现代码(mysql,access,sqlserver,Oracle)
Dec 21 #PHP
Docker配置PHP开发环境教程
Dec 21 #PHP
PHP符合PSR编程规范的实例分享
Dec 21 #PHP
利用PHP生成CSV文件简单示例
Dec 21 #PHP
PHP实现支付宝即时到账功能
Dec 21 #PHP
简单实现PHP留言板功能
Dec 21 #PHP
PHP未登录自动跳转到登录页面
Dec 21 #PHP
You might like
DedeCms模板安装/制作概述
2007/03/11 PHP
PHP 页面编码声明方法详解(header或meta)
2010/03/12 PHP
我的php学习笔记(毕业设计)
2012/02/21 PHP
收集的网上用的ajax之chat.js文件
2007/04/08 Javascript
利用JQuery和JS实现奇偶行背景颜色自定义效果
2012/11/19 Javascript
javascript时间函数基础介绍
2013/03/28 Javascript
js+css实现增加表单可用性之提示文字
2013/06/03 Javascript
8个超实用的jQuery功能代码分享
2015/01/08 Javascript
Angular ng-repeat指令实例以及扩展部分
2016/12/26 Javascript
JS原型继承四步曲及原型继承图一览
2017/11/28 Javascript
详解vue mixins和extends的巧妙用法
2017/12/20 Javascript
Express进阶之log4js实用入门指南
2018/02/10 Javascript
详解vue-cli中模拟数据的两种方法
2018/07/03 Javascript
vue+iview/elementUi实现城市多选
2019/03/28 Javascript
Vue 使用formData方式向后台发送数据的实现
2019/04/14 Javascript
详解vuejs2.0 select 动态绑定下拉框支持多选
2019/04/25 Javascript
详解Vue 单文件组件的三种写法
2020/02/19 Javascript
[01:06]DOTA2隆重推出2016冬季勇士令状 内含上海特级锦标赛互动指南
2016/02/17 DOTA
[54:26]完美世界DOTA2联赛PWL S3 Forest vs Rebirth 第一场 12.10
2020/12/12 DOTA
详解Python进程间通信之命名管道
2017/08/28 Python
python的pandas工具包,保存.csv文件时不要表头的实例
2018/06/14 Python
Flask框架通过Flask_login实现用户登录功能示例
2018/07/17 Python
python dumps和loads区别详解
2020/02/04 Python
Python semaphore evevt生产者消费者模型原理解析
2020/03/18 Python
python中的错误如何查看
2020/07/08 Python
Mamaearth官方网站:印度母婴护理产品公司
2019/10/06 全球购物
小学校园活动策划
2014/01/30 职场文书
《青海高原一株柳》教学反思
2014/04/25 职场文书
重点工程汇报材料
2014/08/27 职场文书
2014年基建工作总结
2014/12/12 职场文书
结婚通知短信大全
2015/04/17 职场文书
2015年高校教师个人工作总结
2015/05/25 职场文书
工作年限证明范本
2015/06/15 职场文书
2016年小学优秀班主任事迹材料
2016/02/29 职场文书
辞职信怎么写?
2019/05/21 职场文书
利用 JavaScript 构建命令行应用
2021/11/17 Javascript