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 相关文章推荐
从MySQL数据库表中取出随机数据的代码
Sep 05 PHP
php zend解密软件绿色版测试可用
Apr 14 PHP
用php实现的获取网页中的图片并保存到本地的代码
Jan 05 PHP
PHP 检查扩展库或函数是否可用的代码
Apr 06 PHP
由php的call_user_func传reference引发的思考
Jul 23 PHP
PHP 验证码的实现代码
Jul 17 PHP
解析:使用php mongodb扩展时 需要注意的事项
Jun 18 PHP
php 伪造HTTP_REFERER页面URL来源的三种方法
Sep 22 PHP
Yii统计不同类型邮箱数量的方法
Oct 18 PHP
PHP开发的微信现金红包功能示例
Jun 29 PHP
PHP多进程编程实例详解
Jul 19 PHP
PHP与JavaScript针对Cookie的读写、交互操作方法详解
Aug 07 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
php MYSQL 数据备份类
2009/06/19 PHP
ThinkPHP内置jsonRPC的缺陷分析
2014/12/18 PHP
Yii扩展组件编写方法实例分析
2015/06/29 PHP
PHP中new static()与new self()的比较
2016/08/19 PHP
实例分析10个PHP常见安全问题
2019/07/09 PHP
jQuery示例收集
2010/11/05 Javascript
编写可维护面向对象的JavaScript代码[翻译]
2011/02/12 Javascript
JavaScript中__proto__与prototype的关系深入理解
2012/12/04 Javascript
Ajax同步与异步传输的示例代码
2013/11/21 Javascript
javascript简单性能问题及学习笔记
2014/02/04 Javascript
jQuery中animate动画第二次点击事件没反应
2015/05/07 Javascript
mvc中form表单提交的三种方式(推荐)
2016/08/10 Javascript
NPM 安装cordova时警告:npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to
2016/12/20 Javascript
angularjs点击图片放大实现上传图片预览
2017/02/24 Javascript
详解Vue 动态添加模板的几种方法
2017/04/25 Javascript
SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题的解决方法
2018/01/09 Javascript
Vue瀑布流插件的使用示例
2018/09/19 Javascript
Vue 封装防刷新考试倒计时组件的实现
2020/06/05 Javascript
vue element-ui中table合计指定列求和实例
2020/11/02 Javascript
python 从远程服务器下载日志文件的程序
2013/02/10 Python
从零开始学Python第八周:详解网络编程基础(socket)
2016/12/14 Python
python中的字典操作及字典函数
2018/01/03 Python
python 反编译exe文件为py文件的实例代码
2019/06/27 Python
Python计算机视觉里的IOU计算实例
2020/01/17 Python
python3中的logging记录日志实现过程及封装成类的操作
2020/05/12 Python
Python unittest装饰器实现原理及代码
2020/09/08 Python
CSS+jQuery+PHP+MySQL实现的在线答题功能
2015/04/25 HTML / CSS
俄罗斯鲜花递送:AMF
2020/04/24 全球购物
数据员岗位职责
2013/11/19 职场文书
楼面部长岗位职责范本
2014/02/14 职场文书
《赶海》教学反思
2014/04/20 职场文书
荷叶母亲教学反思
2014/04/30 职场文书
入党宣誓仪式主持词
2015/06/29 职场文书
英文投诉信格式
2015/07/03 职场文书
python 多态 协议 鸭子类型详解
2021/11/27 Python
idea下配置tomcat避坑详解
2022/04/12 Servers