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 5.0 Pear安装方法
Dec 06 PHP
dedecms系统常用术语汇总
Apr 03 PHP
php MessagePack介绍
Oct 06 PHP
destoon后台网站设置变成空白的解决方法
Jun 21 PHP
ThinkPHP文件上传实例教程
Aug 22 PHP
php写入、删除与复制文件的方法
Jun 20 PHP
php获取英文姓名首字母的方法
Jul 13 PHP
Zend Framework教程之响应对象的封装Zend_Controller_Response实例详解
Mar 07 PHP
数组任意位置插入元素,删除特定元素的实例
Mar 02 PHP
php爬取天猫和淘宝商品数据
Feb 23 PHP
php探针不显示内存解决方法
Sep 17 PHP
PHP7 新增功能
Mar 09 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正则
2006/07/07 PHP
自动分页的不完整解决方案
2007/01/12 PHP
用PHP生成静态HTML速度快类库
2007/03/18 PHP
php中将汉字转换成拼音的函数代码
2012/09/08 PHP
PHP引用的调用方法分析
2016/04/25 PHP
PHP解耦的三重境界(浅谈服务容器)
2017/03/13 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
PHP实现创建一个RPC服务操作示例
2020/02/23 PHP
Javascript String.replace的妙用
2009/09/08 Javascript
jquery命令汇总,方便使用jquery的朋友
2012/06/26 Javascript
原始的js代码和jquery对比体会
2013/09/10 Javascript
利用javascript实现全部删或清空所选的操作
2014/05/27 Javascript
推荐一个封装好的getElementsByClassName方法
2014/12/02 Javascript
javascript中replace( )方法的使用
2015/04/24 Javascript
聊一聊JS中this的指向问题
2016/06/17 Javascript
JQuery.dataTables表格插件添加跳转到指定页
2017/06/09 jQuery
Vue写一个简单的倒计时按钮功能
2018/04/20 Javascript
微信小程序自定义可滑动日历界面
2018/12/28 Javascript
vue项目中锚点定位替代方式
2019/11/13 Javascript
vue实现下载文件流完整前后端代码
2020/11/17 Vue.js
itchat接口使用示例
2017/10/23 Python
python实现字符串中字符分类及个数统计
2018/09/28 Python
Python爬虫将爬取的图片写入world文档的方法
2018/11/07 Python
详解python 利用echarts画地图(热力图)(世界地图,省市地图,区县地图)
2019/08/06 Python
python rsa实现数据加密和解密、签名加密和验签功能
2019/09/18 Python
Pycharm及python安装详细步骤及PyCharm配置整理(推荐)
2020/07/31 Python
Selenium及python实现滚动操作多种方法
2020/07/21 Python
lookfantastic荷兰:在线购买奢华护肤、护发和化妆品
2018/11/27 全球购物
自我鉴定的范文
2013/10/03 职场文书
毕业生自荐书
2014/02/03 职场文书
创建学习型党组织实施方案
2014/03/29 职场文书
小学2016年第十八届推普周活动总结
2016/04/05 职场文书
创业计划书之家政服务
2019/09/18 职场文书
JUnit5常用注解的使用
2021/07/02 Java/Android
ipad隐藏软件app图标方法
2022/04/19 数码科技
instantclient客户端 连接oracle数据库
2022/04/26 Oracle