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 随机生成10位字符代码
Mar 26 PHP
php.ini修改php上传文件大小限制的方法详解
Jun 17 PHP
php 去除html标记--strip_tags与htmlspecialchars的区别详解
Jun 26 PHP
递归删除一个节点以及该节点下的所有节点示例
Mar 19 PHP
PHP采用XML-RPC构造Web Service实例教程
Jul 16 PHP
php实现建立多层级目录的方法
Jul 19 PHP
php实现仿写CodeIgniter的购物车类
Jul 29 PHP
php上传功能集后缀名判断和随机命名(强力推荐)
Sep 10 PHP
PHP静态延迟绑定和普通静态效率的对比
Oct 20 PHP
PHP实现的微信公众号扫码模拟登录功能示例
May 30 PHP
Laravel 实现关系模型取出需要的字段
Oct 10 PHP
thinkphp5实现微信扫码支付
Dec 23 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中使用__autoload()自动加载未定义类的实现代码
2013/02/06 PHP
php基于CodeIgniter实现图片上传、剪切功能
2016/05/14 PHP
Web层改进II-用xmlhttp 无声息提交复杂表单
2007/01/22 Javascript
jQuery控制输入框只能输入数值的小例子
2013/03/20 Javascript
window.open()详解及浏览器兼容性问题示例探讨
2014/05/29 Javascript
jquery判断复选框是否选中进行答题提示特效
2015/12/10 Javascript
AngularJS入门(用ng-repeat指令实现循环输出
2016/05/05 Javascript
iscroll碰到Select无法选择下拉刷新的解决办法
2016/05/21 Javascript
BootStrap实现带有增删改查功能的表格(DEMO详解)
2016/10/26 Javascript
JS正则表达式修饰符中multiline(/m)用法分析
2016/12/27 Javascript
函数四种调用模式以及其中的this指向
2017/01/16 Javascript
浅谈Express异步进化史
2017/09/09 Javascript
VueJs使用Amaze ui调整列表和内容页面
2017/11/30 Javascript
Vue模拟数据,实现路由进入商品详情页面的示例
2018/08/31 Javascript
json 带斜杠时如何解析的实现
2019/08/12 Javascript
windows系统中python使用rar命令压缩多个文件夹示例
2014/05/06 Python
numpy找出array中的最大值,最小值实例
2018/04/03 Python
详解Python文件修改的两种方式
2019/08/22 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
2019/10/24 Python
python boto和boto3操作bucket的示例
2020/10/30 Python
html5使用canvas绘制太阳系效果
2014/12/15 HTML / CSS
德国电子产品购物网站:TechInTheBasket德国
2018/12/07 全球购物
泰国最新活动和优惠:Megatix
2020/05/07 全球购物
创业计划书的内容步骤和要领
2014/01/04 职场文书
《值日生》教学反思
2014/02/17 职场文书
酒店管理毕业生自我鉴定
2014/03/02 职场文书
班级口号大全
2014/06/09 职场文书
生物工程专业求职信
2014/09/03 职场文书
乡镇党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
学雷锋倡议书
2015/01/19 职场文书
导游欢送词
2015/01/31 职场文书
基于Redis结合SpringBoot的秒杀案例详解
2021/10/05 Redis
MYSQL优化之数据表碎片整理详解
2022/04/03 MySQL
详细聊一聊mysql的树形结构存储以及查询
2022/04/05 MySQL
Nginx禁止ip访问或非法域名访问
2022/04/07 Servers
Python 操作pdf pdfplumber读取PDF写入Exce
2022/08/14 Python