php curl的深入解析


Posted in PHP onJune 02, 2013

curl可以说是php里一个非常强大的功能,每个php程序员都应该学习并熟悉curl,使用curl前确保你的php_curl扩展已经开启。

一、curl使用
例如:我们采集深圳智联招聘上PHP招聘的第一页信息

$url='http://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E6%B7%B1%E5%9C%B3&kw=php&sm=0&p=1';
//初始化
$ch = curl_init();
//设置选项,包括URL
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//不自动输出内容
curl_setopt($ch, CURLOPT_HEADER, 0);//不返回头部信息
//执行curl
$output = curl_exec($ch);
//错误提示
if(curl_exec($ch) === false){
    die(curl_error($ch));
}
//释放curl句柄
curl_close($ch);
header('Content-type: text/html; charset=utf-8');
echo $output;

当然我们必须对返回的数据使用<<正则表达式>>处理,找出我们想要的那一部分,然后根据你的需要把数据填充到你网站里
//职位名称
preg_match_all('/<td class="Jobname">.*?<a\s*href="(.*?)"\starget="_blank">(.*?)<\/a>/s', $output, $title);
$title[1];//链接
$title[2];//标题
//公司名称
preg_match_all('/<td class="Companyname">.*?<a href="(.*?)"\starget="_blank">(.*?)<\/a>/s', $output, $company);
$company[1];//链接
$company[2];//名字
//工作地点
preg_match_all('/<td class="Companyaddress">\s*(.*?)\s*<\/td>/s', $output, $address);
$address[1];//地点
//发布日期
preg_match_all('/<td class="releasetime">\s*(.*?)\s*<\/td>/s', $output, $time);
$time[1];//时间
var_dump($time[1]);

二、常用功能
curl的核心是通过设置各种选项来达到各种功能,这里我们介绍几种常用的选项。
1.post数据
$post=array(
'uid'=>'test',
'pwd'=>'curl123'
);
curl_setopt($ch, CURLOPT_POST, 1);//设置为POST方式
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));//POST数据

2.cookie
$savefile=dirname(__FILE__).'save.txt';
$getfile=dirname(__FILE__).'get.txt';
//可以分开使用
curl_setopt($ch, CURLOPT_COOKIEJAR, $savefile); //保存  
curl_setopt($ch, CURLOPT_COOKIEFILE, $getfile); //读取

3.伪造IP、来路
curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-FORWARDED-FOR:8.8.8.8', 'CLIENT-IP:8.8.8.8'));//构造IP  
curl_setopt($ch, CURLOPT_REFERER, "http://www.baidu.com");//构造来路 

curl_setopt选项大全,详见PHP手册:http://www.php.net/manual/zh/function.curl-setopt.php
三、多线程
官方示例
// 创建一对cURL资源
$ch1 = curl_init();
$ch2 = curl_init();
// 设置URL和相应的选项
curl_setopt($ch1, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch1, CURLOPT_HEADER, 0);
curl_setopt($ch2, CURLOPT_URL, "http://www.php.net/");
curl_setopt($ch2, CURLOPT_HEADER, 0);
// 创建批处理cURL句柄
$mh = curl_multi_init();
// 增加2个句柄
curl_multi_add_handle($mh,$ch1);
curl_multi_add_handle($mh,$ch2);
$running=null;
// 执行批处理句柄
do {
    usleep(10000);
    curl_multi_exec($mh,$running);
} while ($running > 0);
// 关闭全部句柄
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);

PHP 相关文章推荐
PHP+MySQL 制作简单的留言本
Nov 02 PHP
php模拟js函数unescape的函数代码
Oct 20 PHP
php使用curl发送json格式数据实例
Dec 17 PHP
让CodeIgniter数据库缓存自动过期的处理的方法
Jun 12 PHP
PHP实现获取FLV文件的时间
Feb 10 PHP
smarty模板引擎基础知识入门
Mar 30 PHP
PHP简单实现HTTP和HTTPS跨域共享session解决办法
May 27 PHP
PHP HTTP 认证实例详解
Nov 03 PHP
php 从指定数字中获取随机组合的简单方法(推荐)
Apr 05 PHP
利用PHPStorm如何开发Laravel应用详解
Aug 30 PHP
PHP7导出Excel报ERR_EMPTY_RESPONSE解决方法
Apr 16 PHP
tp5.0框架隐藏index.php入口文件及模块和控制器的方法分析
Feb 11 PHP
Window 7/XP 安装Apache 2.4与PHP 5.4 的过程详解
Jun 02 #PHP
web站点获取用户IP的安全方法 HTTP_X_FORWARDED_FOR检验
Jun 01 #PHP
获取用户Ip地址通用方法与常见安全隐患(HTTP_X_FORWARDED_FOR)
Jun 01 #PHP
php源代码安装常见错误与解决办法分享
May 28 #PHP
如何批量替换相对地址为绝对地址(利用bat批处理实现)
May 27 #PHP
php 深入理解strtotime函数的使用详解
May 23 #PHP
如何使用PHP计算上一个月的今天
May 23 #PHP
You might like
php入门学习知识点四 PHP正则表达式基本应用
2011/07/14 PHP
CI框架中集成CKEditor编辑器的教程
2014/06/09 PHP
ThinkPHP2.x防范XSS跨站攻击的方法
2015/09/25 PHP
PHP实现将MySQL重复ID二维数组重组为三维数组的方法
2016/08/01 PHP
thinkPHP框架中执行原生SQL语句的方法
2017/10/25 PHP
记录几个javascript有关的小细节
2007/04/02 Javascript
javascript 四则运算精度修正函数代码
2010/05/31 Javascript
JS关键字球状旋转效果的实例代码
2013/11/29 Javascript
javascript面向对象快速入门实例
2015/01/13 Javascript
JS动态修改iframe内嵌网页地址的方法
2015/04/01 Javascript
jquery动态导航插件dynamicNav用法实例分析
2015/09/06 Javascript
js实现文件上传表单域美化特效
2015/11/02 Javascript
JavaScript代码实现禁止右键、禁选择、禁粘贴、禁shift、禁ctrl、禁alt
2015/11/17 Javascript
JavaScript Promise 用法
2016/06/14 Javascript
微信小程序 限制1M的瘦身技巧与方法详解
2017/01/06 Javascript
js cookie实现记住密码功能
2017/01/17 Javascript
原生js实现简单的模态框示例
2017/09/08 Javascript
微信小程序url与token设置详解
2017/09/26 Javascript
JS实现匀速与减速缓慢运动的动画效果封装示例
2018/08/27 Javascript
JS数组降维的实现Array.prototype.concat.apply([], arr)
2020/04/28 Javascript
vue添加锚点,实现滚动页面时锚点添加相应的class操作
2020/08/10 Javascript
Python实现多线程下载文件的代码实例
2014/06/01 Python
基于随机梯度下降的矩阵分解推荐算法(python)
2018/08/31 Python
使用pickle存储数据dump 和 load实例讲解
2019/12/30 Python
python 异步async库的使用说明
2020/05/04 Python
在Python3.74+PyCharm2020.1 x64中安装使用Kivy的详细教程
2020/08/07 Python
Python os库常用操作代码汇总
2020/11/03 Python
中学老师的自我评价
2013/11/07 职场文书
行政文员岗位职责
2013/11/08 职场文书
电气自动化个人求职信范文
2014/02/03 职场文书
《乌塔》教学反思
2014/02/17 职场文书
2015年党员个人剖析材料
2014/12/18 职场文书
大学生社会服务心得体会
2016/01/22 职场文书
2016年社区植树节活动总结
2016/03/16 职场文书
2019年聘任书的写作格式及范文!
2019/07/03 职场文书
基于redis+lua进行限流的方法
2022/07/23 Redis