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的String类代码
Apr 20 PHP
ajax在joomla中的原生态应用代码
Jul 19 PHP
解析PHP留言本模块主要功能的函数说明(代码可实现)
Jun 25 PHP
PHP 函数call_user_func和call_user_func_array用法详解
Mar 02 PHP
PHP获取客户端真实IP地址的5种情况分析和实现代码
Jul 08 PHP
php中heredoc与nowdoc介绍
Dec 25 PHP
php使用pclzip类实现文件压缩的方法(附pclzip类下载地址)
Apr 30 PHP
PHP设计模式之原型模式定义与用法详解
Apr 03 PHP
php实现session共享的实例方法
Sep 19 PHP
Laravel 模型使用软删除-左连接查询-表起别名示例
Oct 24 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
Feb 21 PHP
open_basedir restriction in effect. 原因与解决方法
Mar 14 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简单的会话类代码
2011/08/08 PHP
php根据日期显示所在星座的方法
2015/07/13 PHP
浅谈PHP中静态方法和非静态方法的相互调用
2016/10/04 PHP
什么是PHP7中的孤儿进程与僵尸进程
2019/04/14 PHP
PHP中mysqli_get_server_version()的实例用法
2020/02/03 PHP
IE autocomplete internet explorer's autocomplete
2007/06/30 Javascript
没有document.getElementByName方法
2013/08/19 Javascript
javascript函数定义的几种区别小结
2014/01/06 Javascript
js数组的操作指南
2014/12/28 Javascript
js基于面向对象实现网页TAB选项卡菜单效果代码
2015/09/09 Javascript
JS基于Mootools实现的个性菜单效果代码
2015/10/21 Javascript
纯JavaScript基于notie.js插件实现消息提示特效
2016/01/18 Javascript
Vue.js原理分析之observer模块详解
2017/02/17 Javascript
js断点调试经验分享
2017/12/08 Javascript
vue v-model动态生成详解
2018/06/30 Javascript
vue实现图片预览组件封装与使用
2019/07/13 Javascript
浅谈Vue组件单元测试究竟测试什么
2020/02/05 Javascript
[32:47]完美世界DOTA2联赛 GXR vs IO 第二场 11.07
2020/11/09 DOTA
python模拟新浪微博登陆功能(新浪微博爬虫)
2013/12/24 Python
Python中encode()方法的使用简介
2015/05/18 Python
解决Linux系统中python matplotlib画图的中文显示问题
2017/06/15 Python
Python有序字典简单实现方法示例
2017/09/28 Python
Python判断中文字符串是否相等的实例
2018/07/06 Python
python爬取微信公众号文章的方法
2019/02/26 Python
python实现PID算法及测试的例子
2019/08/08 Python
python如何输出反斜杠
2020/06/18 Python
Python 微信公众号文章爬取的示例代码
2020/11/30 Python
一款利用纯css3实现的360度翻转按钮的实例教程
2014/11/05 HTML / CSS
瑞典领先的汽车零部件网上零售商:bildelaronline24.se
2017/01/12 全球购物
C#中类(class)与结构(struct)的异同
2013/11/03 面试题
Ajax请求总共有多少种Callback
2016/07/17 面试题
测控技术与仪器个人求职信范文
2013/12/30 职场文书
甜品蛋糕店创业计划书范文
2014/02/06 职场文书
机关单位人员学雷锋心得体会
2014/03/10 职场文书
厉行勤俭节约倡议书
2014/05/16 职场文书
SQL Server基本使用和简单的CRUD操作
2021/04/05 SQL Server