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中支持多种编码的中文字符串截取函数!
Mar 20 PHP
PHP curl_setopt()函数实例代码与参数分析
Jun 02 PHP
PHP生成验证码时“图像因其本身有错无法显示”的解决方法
Aug 07 PHP
PHP限制页面只能在微信自带浏览器访问的代码
Jan 15 PHP
PHP和javascript常用正则表达式及用法实例
Jul 01 PHP
浅析php创建者模式
Nov 25 PHP
php获取文件名后缀常用方法小结
Feb 24 PHP
PHP抽奖算法程序代码分享
Oct 08 PHP
PHP中的Trait 特性及作用
Apr 03 PHP
Zend Framework校验器Zend_Validate用法详解
Dec 09 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
Feb 06 PHP
Yii框架页面渲染操作实例详解
Jul 19 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 地址栏信息的获取代码
2009/01/07 PHP
php在window iis的莫名问题的测试方法
2013/05/14 PHP
PHP基于curl模拟post提交json数据示例
2018/06/22 PHP
两个DIV等高的JS的实现代码
2007/12/23 Javascript
javascript 打印页面代码
2009/03/24 Javascript
javascript 函数速查表
2010/02/07 Javascript
基于jquery的复制网页内容到WORD的实现代码
2011/02/16 Javascript
jqGrid jQuery 表格插件测试代码
2011/08/23 Javascript
javascript时区函数介绍
2012/09/14 Javascript
window.onresize 多次触发的解决方法
2013/11/08 Javascript
Javascript基础教程之变量
2015/01/18 Javascript
jquery中animate的stop()方法作用实例分析
2015/01/30 Javascript
js简单实现表单中点击按钮动态增加输入框数量的方法
2015/08/18 Javascript
Angular 2 ngForm中的ngModel、[ngModel]和[(ngModel)]的写法
2017/06/29 Javascript
jQuery实现文件编码成base64并通过AJAX上传的方法
2018/04/12 jQuery
原生js实现拖拽功能基本思路详解
2018/04/18 Javascript
JavaScript实现京东购物放大镜和选项卡效果的方法分析
2018/07/05 Javascript
vue实现商品加减计算总价的实例代码
2018/08/12 Javascript
对VUE中的对象添加属性
2018/09/18 Javascript
vue-cli 首屏加载优化问题
2018/11/06 Javascript
Python多线程threading模块用法实例分析
2019/05/22 Python
Python进阶:生成器 懒人版本的迭代器详解
2019/06/29 Python
python SVM 线性分类模型的实现
2019/07/19 Python
python实现机器人卡牌
2019/10/06 Python
numpy ndarray 按条件筛选数组,关联筛选的例子
2019/11/26 Python
python 读写文件包含多种编码格式的解决方式
2019/12/20 Python
python 6.7 编写printTable()函数表格打印(完整代码)
2020/03/25 Python
使用python检查yaml配置文件是否符合要求
2020/04/09 Python
Django封装交互接口代码
2020/07/12 Python
美国精油公司:Plant Therapy
2019/05/17 全球购物
工商干部先进事迹
2014/05/14 职场文书
中学教师师德师风演讲稿
2014/08/22 职场文书
我的大学四年规划书范文2014
2014/09/26 职场文书
2016年春节慰问信息
2015/03/25 职场文书
CSS SandBox应用场景及常见问题
2022/06/25 HTML / CSS
nginx之内存池的实现
2022/06/28 Servers