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 相关文章推荐
JAVA/JSP学习系列之二
Oct 09 PHP
在windows iis5下安装php4.0+mysql之我见
Oct 09 PHP
PHP数据缓存技术
Feb 14 PHP
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
May 10 PHP
PHP操作XML作为数据库的类
Dec 19 PHP
PHP CURL模拟登录新浪微博抓取页面内容 基于EaglePHP框架开发
Jan 16 PHP
php使用异或实现的加密解密实例
Sep 04 PHP
PHP中func_get_args(),func_get_arg(),func_num_args()的区别
Sep 30 PHP
PHP中ltrim与rtrim去除左右空格及特殊字符实例
Jan 07 PHP
PHP连接MySQL进行增、删、改、查操作
Feb 19 PHP
阿里云PHP SMS短信服务验证码发送方法
Jul 11 PHP
PHP lcfirst()函数定义与用法
Mar 08 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
德生S2000南麂列岛台湾FM收听记录
2021/03/02 无线电
php缩小png图片不损失透明色的解决方法
2013/12/25 PHP
浅谈php+phpStorm+xdebug配置方法
2015/09/17 PHP
php自定义函数实现汉字转换utf8编码的方法
2016/09/29 PHP
PHP实现的分解质因数操作示例
2018/08/01 PHP
CSS和JS标签style属性对照表(方便js开发的朋友)
2010/11/11 Javascript
基于jquery的固定表头和列头的代码
2012/05/03 Javascript
JavaScript中json使用自己总结
2013/08/13 Javascript
JavaScript异步编程:异步数据收集的具体方法
2013/08/19 Javascript
JS的document.all函数使用示例
2013/12/30 Javascript
jQuery继承extend用法详解
2016/10/10 Javascript
微信小程序去哪里找 小程序到底如何使用(附小程序名单)
2017/01/09 Javascript
JS得到当前时间的方法示例
2017/03/24 Javascript
React Native使用Modal自定义分享界面的示例代码
2017/10/31 Javascript
vue项目部署到Apache服务器中遇到的问题解决
2018/08/24 Javascript
关于Vue源码vm.$watch()内部原理详解
2019/04/26 Javascript
jquery将信息遍历到界面上实例代码
2020/01/21 jQuery
Vue如何将页面导出成PDF文件
2020/08/17 Javascript
Python网络编程基于多线程实现多用户全双工聊天功能示例
2018/04/10 Python
Python Threading 线程/互斥锁/死锁/GIL锁
2019/07/21 Python
对pytorch的函数中的group参数的作用介绍
2020/02/18 Python
如何更换python默认编辑器的背景色
2020/08/10 Python
matplotlib教程——强大的python作图工具库
2020/10/15 Python
python向xls写入数据(包括合并,边框,对齐,列宽)
2021/02/02 Python
THE OUTNET英国官网:国际设计师品牌折扣网站
2016/08/14 全球购物
全球最大的房车租赁市场:Outdoorsy
2018/09/19 全球购物
印度在线购物网站:Paytmmall
2019/07/24 全球购物
Love, Bonito国际官网:新加坡女装品牌
2021/03/13 全球购物
自主招生自荐书
2013/11/29 职场文书
小学运动会演讲稿
2014/08/25 职场文书
2014广电局实施党的群众路线教育实践活动方案思想汇报
2014/09/22 职场文书
致百米运动员广播稿5篇
2014/10/13 职场文书
2014年招商引资工作总结
2014/11/22 职场文书
2015年教师党员个人总结
2015/11/24 职场文书
go设置多个GOPATH的方式
2021/05/05 Golang
python图像处理 PIL Image操作实例
2022/04/09 Python