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 日期时间处理函数小结
Dec 18 PHP
php的日期处理函数及uchome的function_coomon中日期处理函数的研究
Jan 12 PHP
file_get_contents(&quot;php://input&quot;, &quot;r&quot;)实例介绍
Jul 01 PHP
php-perl哈希算法实现(times33哈希算法)
Dec 30 PHP
两种php给图片加水印的实现代码
Apr 18 PHP
Yii快速入门经典教程
Dec 28 PHP
PHP中PDO的事务处理分析
Apr 07 PHP
eclipse php wamp配置教程
Jun 30 PHP
PHP基于Redis消息队列实现发布微博的方法
May 03 PHP
PHP生成二维码与识别二维码的方法详解【附源码下载】
Mar 07 PHP
Laravel 验证码认证学习记录小结
Dec 20 PHP
YII2框架中添加自定义模块的方法实例分析
Mar 18 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
Sony CFR 320 修复改造
2020/03/14 无线电
WINDOWS 2000下使用ISAPI方式安装PHP
2006/09/05 PHP
php 接口类与抽象类的实际作用
2009/11/26 PHP
PHP中的use关键字及文件的加载详解
2016/11/28 PHP
PHP常见字符串处理函数用法示例【转换,转义,截取,比较,查找,反转,切割】
2016/12/24 PHP
PHP常用算法和数据结构示例(必看篇)
2017/03/15 PHP
PHP实现数组的笛卡尔积运算示例
2017/12/15 PHP
破除网页鼠标右键被禁用的绝招大全
2006/12/27 Javascript
THREE.JS入门教程(6)创建自己的全景图实现步骤
2013/01/25 Javascript
Javascript毫秒数用法实例
2015/02/05 Javascript
JavaScript代码实现左右上下自动晃动自动移动
2016/04/08 Javascript
微信小程序 wxapp内容组件 text详细介绍
2016/10/31 Javascript
原生js实现可拖动的登录框效果
2017/01/21 Javascript
Angular在一个页面中使用两个ng-app的方法
2017/02/20 Javascript
vuejs2.0实现一个简单的分页示例
2017/02/22 Javascript
nodejs学习笔记之路由
2017/03/27 NodeJs
MUI  Scroll插件的使用详解
2017/04/13 Javascript
JavaScript实现构造json数组的方法分析
2018/08/17 Javascript
Vue 表情包输入组件的实现代码
2019/01/21 Javascript
layUI实现三级导航菜单效果
2019/07/26 Javascript
JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记
2020/07/15 Javascript
Flexible.js可伸缩布局实现方法详解
2020/11/13 Javascript
微信小程序自定义支持图片的弹窗
2020/12/21 Javascript
跟老齐学Python之做一个小游戏
2014/09/28 Python
python调用java模块SmartXLS和jpype修改excel文件的方法
2015/04/28 Python
在django项目中导出数据到excel文件并实现下载的功能
2020/03/13 Python
Python实现在线批量美颜功能过程解析
2020/06/10 Python
解决pytorch 保存模型遇到的问题
2021/03/03 Python
CSS3 实现穿梭星空动画
2020/11/13 HTML / CSS
域名注册、建站工具、网页主机、SSL证书:Dynadot
2017/01/06 全球购物
Expedia西班牙:预订酒店、机票、旅行和廉价度假套餐
2019/04/10 全球购物
FORZIERI福喜利中国官网:奢侈品购物梦工厂
2019/05/03 全球购物
King Apparel官网:英国街头服饰品牌
2019/09/05 全球购物
减负增效提质方案
2014/05/23 职场文书
申论不会写怎么办?教您掌握这6点思维和原则
2019/07/17 职场文书
Golang 结构体数据集合
2022/04/22 Golang