PHP中使用CURL模拟登录并获取数据实例


Posted in PHP onJuly 01, 2014

cURL 是一个功能强大的PHP库,使用PHP的cURL库可以简单和有效地抓取网页并采集内容,设置cookie完成模拟登录网页,curl提供了丰富的函数,开发者可以从PHP手册中获取更多关于cURL信息。本文以模拟登录开源中国(oschina)为例,和大家分享cURL的使用。
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.3water.com/action/user/login"; 

//设置cookie保存路径 

$cookie = dirname(__FILE__) . '/cookie_3water.txt'; 

//登录后要获取信息的地址 

$url2 = "http://m.3water.com/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;

运行上述代码后,我们会看到最终获取到登录用户的头像图片。

PHP中使用CURL模拟登录并获取数据实例

使用总结:
1、初始化curl;
2、使用curl_setopt设置目标url,和其他选项;
3、curl_exec,执行curl;
4、执行后,关闭curl;
5、输出数据。

PHP 相关文章推荐
用php获取本周,上周,本月,上月,本季度日期的代码
Aug 05 PHP
php foreach、while性能比较
Oct 15 PHP
phplock(php进程锁) v1.0 beta1
Nov 24 PHP
php生成EAN_13标准条形码实例
Nov 13 PHP
PHP获取POST数据的几种方法汇总
Mar 03 PHP
Yii2前后台分离及migrate使用(七)
May 04 PHP
PHP编写的图片验证码类文件分享
Jun 06 PHP
PHP封装curl的调用接口及常用函数详解
May 31 PHP
PHP使用XMLWriter读写xml文件操作详解
Jul 31 PHP
分享8个Laravel模型时间戳使用技巧小结
Feb 12 PHP
thinkphp诸多限制条件下如何getshell详解
Dec 09 PHP
如何使用php生成zip压缩包
Apr 21 PHP
2个比较经典的PHP加密解密函数分享
Jul 01 #PHP
PHP实现生成唯一编号(36进制的不重复编号)
Jul 01 #PHP
ThinkPHP使用smarty模板引擎的方法
Jul 01 #PHP
PHP使用GIFEncoder类处理gif图片实例
Jul 01 #PHP
ThinkPHP模板IF标签用法详解
Jul 01 #PHP
PHP使用GIFEncoder类生成gif动态滚动字幕
Jul 01 #PHP
PHP使用GIFEncoder类生成的GIF动态图片验证码
Jul 01 #PHP
You might like
虫族 Zerg 魔法科技
2020/03/14 星际争霸
WINXP下apache+php4+mysql
2006/11/25 PHP
关于php正则匹配汉字的方法介绍
2013/04/25 PHP
php单态设计模式(单例模式)实例
2014/11/18 PHP
AES加解密在php接口请求过程中的应用示例
2016/10/26 PHP
Javascript结合css实现网页换肤功能
2009/11/02 Javascript
jQuery对表单元素的取值和赋值操作代码
2011/05/19 Javascript
Jquery submit()无法提交问题
2013/04/21 Javascript
js获取某月的最后一天日期的简单实例
2013/06/22 Javascript
js实现飞入星星特效代码
2014/10/17 Javascript
Javascript中innerHTML用法实例分析
2015/01/12 Javascript
js改变embed标签src值的方法
2015/04/10 Javascript
javascript学习笔记之函数定义
2015/06/25 Javascript
JavaScript cookie详解及简单实例应用
2016/12/31 Javascript
Mongoose经常返回e11000 error的原因分析
2017/03/29 Javascript
js如何编写简单的ajax方法库
2017/08/02 Javascript
JavaScript内存泄漏的处理方式
2017/11/20 Javascript
vue实现百度下拉列表交互操作示例
2019/03/12 Javascript
使用Vue CLI创建typescript项目的方法
2019/08/09 Javascript
node.js使用 http-proxy 创建代理服务器操作示例
2020/02/10 Javascript
js实现简易ATM功能
2020/10/27 Javascript
uni-app 自定义底部导航栏的实现
2020/12/11 Javascript
vue项目如何监听localStorage或sessionStorage的变化
2021/01/04 Vue.js
Python星号*与**用法分析
2018/02/02 Python
python2使用bs4爬取腾讯社招过程解析
2019/08/14 Python
解决python -m pip install --upgrade pip 升级不成功问题
2020/03/05 Python
python实现人工蜂群算法
2020/09/18 Python
CSS 说明横向进度条最后显示文字的实现代码
2020/11/10 HTML / CSS
美国时装品牌:Nautica(诺帝卡)
2016/08/28 全球购物
《老王》教学反思
2014/02/23 职场文书
安全在我心中演讲稿
2014/09/01 职场文书
2014年银行年终工作总结
2014/12/19 职场文书
《多彩的民间艺术》教学反思
2016/02/16 职场文书
助学金申请书该怎么写?
2019/07/16 职场文书
带你了解CSS基础知识,样式
2021/07/21 HTML / CSS
《异世界四重奏》剧场版6月10日上映 PV视觉图原创角色发表
2022/03/20 日漫