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 相关文章推荐
服务器端解压缩zip的脚本
Dec 22 PHP
PHP 日志缩略名的创建函数代码
May 26 PHP
PHP header函数分析详解
Aug 06 PHP
php实现多张图片上传加水印技巧
Apr 18 PHP
php获取从百度搜索进入网站的关键词的详细代码
Jan 08 PHP
php 使用file_get_contents读取大文件的方法
Nov 13 PHP
PHP中的常见魔术方法功能作用及用法实例
Jul 01 PHP
WordPress中制作导航菜单的PHP核心方法讲解
Dec 11 PHP
php遍历解析xml字符串的方法
May 05 PHP
php使用yield对性能提升的测试实例分析
Sep 19 PHP
PHP项目多语言配置平台实现过程解析
May 18 PHP
你真的了解PHP中的引用符号(&)吗
May 12 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
利用PHP实现图片等比例放大和缩小的方法详解
2013/06/06 PHP
ThinkPHP之用户注册登录留言完整实例
2014/07/22 PHP
两种php去除二维数组的重复项方法
2015/11/04 PHP
PHP使用Redis实现防止大并发下二次写入的方法
2017/10/09 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
2020/03/26 PHP
jQuery入门知识简介
2010/03/04 Javascript
jQuery EasyUI API 中文文档 可调整尺寸
2011/09/29 Javascript
jquery.tmpl JQuery模板插件
2011/10/10 Javascript
jquery判断RadioButtonList和RadioButton中是否有选中项示例
2013/09/29 Javascript
jquery中focus()函数实现当对象获得焦点后自动把光标移到内容最后
2013/09/29 Javascript
AngularJS HTML编译器介绍
2014/12/06 Javascript
jQuery的load()方法及其回调函数用法实例
2015/03/25 Javascript
js判断文本框输入的内容是否为数字
2015/12/23 Javascript
JS实现显示带倒影的图片横排居中放大展示特效实例【测试可用】
2016/08/23 Javascript
微信小程序scroll-view实现横向滚动和上拉加载示例
2017/03/06 Javascript
vue 里面使用axios 和封装的示例代码
2017/09/01 Javascript
BootStrap 标题设置跨行无效的解决方法
2017/10/25 Javascript
js捆绑TypeScript声明文件的方法教程
2018/04/13 Javascript
javascript 数组精简技巧小结
2020/02/26 Javascript
[05:02]2014DOTA2 TI中国区预选赛精彩TOPPLAY第三弹
2014/06/25 DOTA
python threading模块操作多线程介绍
2015/04/08 Python
Python素数检测实例分析
2015/06/15 Python
​如何愉快地迁移到 Python 3
2019/04/28 Python
pycharm 关掉syntax检查操作
2020/06/09 Python
如何使用PyCharm引入需要使用的包的方法
2020/09/22 Python
python之openpyxl模块的安装和基本用法(excel管理)
2021/02/03 Python
通过css3的filter滤镜改变png图片的颜色的示例代码
2020/05/06 HTML / CSS
HTML5 progress和meter控件_动力节点Java学院整理
2017/07/06 HTML / CSS
Adobe Html5 Extension开发初体验图文教程
2017/11/14 HTML / CSS
曼联官方网上商店:Manchester United Direct
2017/07/28 全球购物
超市营业员岗位职责
2013/12/20 职场文书
人民币使用说明书
2019/04/17 职场文书
2019交通安全宣传标语集锦!
2019/06/28 职场文书
python tkinter模块的简单使用
2021/04/07 Python
详解PyTorch模型保存与加载
2022/04/28 Python
Python FuzzyWuzzy实现模糊匹配
2022/04/28 Python