php curl常用的5个经典例子


Posted in PHP onJanuary 20, 2017

我用php ,curl主要是抓取数据,当然我们可以用其他的方法来抓取,比如fsockopen,file_get_contents等。但是只能抓那些能直接访问的页面,如果要抓取有页面访问控制的页面,或者是登录以后的页面就比较困难了。

1,抓取无访问控制文件

<?php 
 $ch = curl_init(); 
 curl_setopt($ch, CURLOPT_URL, "http://localhost/mytest/phpinfo.php"); 
 curl_setopt($ch, CURLOPT_HEADER, false); 
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //如果把这行注释掉的话,就会直接输出 
 $result=curl_exec($ch); 
 curl_close($ch); 
 ?>

2,使用代理进行抓取

为什么要使用代理进行抓取呢?以google为例吧,如果去抓google的数据,短时间内抓的很频繁的话,你就抓取不到了。google对你的ip地址做限制这个时候,你可以换代理重新抓。

<pre name="code" class="php"><?php 
 $ch = curl_init(); 
 curl_setopt($ch, CURLOPT_URL, "http://blog.51yip.com"); 
 curl_setopt($ch, CURLOPT_HEADER, false); 
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
 curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, TRUE); 
 curl_setopt($ch, CURLOPT_PROXY, 125.21.23.6:8080); 
 //url_setopt($ch, CURLOPT_PROXYUSERPWD, 'user:password');如果要密码的话,加上这个 
 $result=curl_exec($ch); 
 curl_close($ch); 
 ?>

3,post数据后,抓取数据

单独说一下数据提交数据,因为用 curl的时候,很多时候会有数据交互的,所以比较重要的。

<?php 
 $ch = curl_init(); 
 /*在这里需要注意的是,要提交的数据不能是二维数组或者更高 
 *例如array('name'=>serialize(array('tank','zhang')),'sex'=>1,'birth'=>'20101010') 
 *例如array('name'=>array('tank','zhang'),'sex'=>1,'birth'=>'20101010')这样会报错的*/ 
 $data = array('name' => 'test', 'sex'=>1,'birth'=>'20101010'); 
 curl_setopt($ch, CURLOPT_URL, 'http://localhost/mytest/curl/upload.php'); 
 curl_setopt($ch, CURLOPT_POST, 1); 
 curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
 curl_exec($ch); 
 ?>

在 upload.php文件中,print_r($_POST);利用curl就能抓取出upload.php输出的内容Array ( [name] => test [sex] => 1 [birth] => 20101010 )

4,抓取一些有页面访问控制的页面

php curl常用的5个经典例子

以前写过一篇,页面访问控制的3种方法有兴趣的可以看一下。

如果用上面提到的方法抓的话,会报以下错误

You are not authorized to view this page
You do not have permission to view this directory or page using the credentials that you supplied because your Web browser is sending a WWW-Authenticate header field that the Web server is not configured to accept.

这个时候,我们就要用CURLOPT_USERPWD来进行验证了

<?php 
 $ch = curl_init(); 
 curl_setopt($ch, CURLOPT_URL, "http://club-china"); 
 /*CURLOPT_USERPWD主要用来破解页面访问控制的 
 *例如平时我们所以htpasswd产生页面控制等。*/ 
 //curl_setopt($ch, CURLOPT_USERPWD, 'user:password'); 
 curl_setopt($ch, CURLOPT_HTTPGET, 1); 
 curl_setopt($ch, CURLOPT_REFERER, "http://club-china"); 
 curl_setopt($ch, CURLOPT_HEADER, 0); 
 $result=curl_exec($ch); 
 curl_close($ch); 
 ?>

以上这篇php curl常用的5个经典例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php下过滤html代码的函数 提高程序安全性
Mar 02 PHP
深入php list()函数的详解
Jun 05 PHP
PHP图片等比例缩放生成缩略图函数分享
Jun 10 PHP
php通过array_shift()函数移除数组第一个元素的方法
Mar 18 PHP
Laravel 5 框架入门(四)完结篇
Apr 09 PHP
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
Mar 20 PHP
PHP数组函数知识汇总
May 12 PHP
浅析php静态方法与非静态方法的用法区别
May 17 PHP
round robin权重轮循算法php实现代码
May 28 PHP
PHP实现Google plus的好友拖拽分组效果
Oct 21 PHP
关于PHP转换超过2038年日期出错的问题解决
Jun 28 PHP
在laravel中使用with实现动态添加where条件
Oct 10 PHP
php技巧小结【推荐】
Jan 19 #PHP
Yii CDBCriteria常用方法实例小结
Jan 19 #PHP
PHP对象实例化单例方法
Jan 19 #PHP
Yii框架引用插件和ckeditor中body与P标签去除的方法
Jan 19 #PHP
利用PHP获取网站访客的所在地位置
Jan 18 #PHP
PHP面向对象学习之parent::关键字
Jan 18 #PHP
php输出含有“#”字符串的方法
Jan 18 #PHP
You might like
双冒号 ::在PHP中的使用情况
2015/11/05 PHP
PHP模拟post提交数据方法汇总
2016/02/16 PHP
PHP随机数函数rand()与mt_rand()的讲解
2019/03/25 PHP
PHP 加密 Password Hashing API基础知识点
2020/03/02 PHP
JavaScript的null和undefined区别示例介绍
2014/09/15 Javascript
Vuejs第十一篇组件之slot内容分发实例详解
2016/09/09 Javascript
详解Angular.js的$q.defer()服务异步处理
2016/11/06 Javascript
使用微信小程序开发前端【快速入门】
2016/12/05 Javascript
Ionic+AngularJS实现登录和注册带验证功能
2017/02/09 Javascript
AngularJs用户登录问题处理(交互及验证、阻止FQ处理)
2017/10/26 Javascript
vue实现图片滚动的示例代码(类似走马灯效果)
2018/03/03 Javascript
Bootstrap-table使用footerFormatter做统计列功能
2018/09/07 Javascript
vue-router beforeEach跳转路由验证用户登录状态
2018/12/26 Javascript
通过实例讲解JS如何防抖动
2019/06/15 Javascript
JavaScript 实现HTML DOM增删改查操作的常见方法详解
2020/01/04 Javascript
jquery简易手风琴插件的封装
2020/10/13 jQuery
[36:05]DOTA2亚洲邀请赛 3.31 小组赛 A组 Liquid vs Optic
2018/04/01 DOTA
Python 初始化多维数组代码
2008/09/06 Python
Python 查看list中是否含有某元素的方法
2018/06/27 Python
详解Python匿名函数(lambda函数)
2019/04/19 Python
python类中super() 的使用解析
2019/12/19 Python
python实现用户名密码校验
2020/03/18 Python
jupyter note 实现将数据保存为word
2020/04/14 Python
django模板获取list中指定索引的值方式
2020/05/14 Python
thinkphp5 路由分发原理
2021/03/18 PHP
美国波西米亚风格精品店:South Moon Under
2019/10/26 全球购物
为什么group by 和order by会使查询变慢
2014/05/16 面试题
介绍一下linux文件系统分配策略
2013/02/25 面试题
双十佳事迹材料
2014/01/29 职场文书
气象学专业个人求职信
2014/04/22 职场文书
法院干警四风问题自我剖析材料
2014/09/29 职场文书
教师个人培训总结
2015/02/11 职场文书
确保工程质量承诺书
2015/04/29 职场文书
毕业实习感受与体会
2015/05/26 职场文书
浅谈Redis存储数据类型及存取值方法
2021/05/08 Redis
低门槛开发iOS、Android、小程序应用的前端框架详解
2021/10/16 Javascript