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 相关文章推荐
mysql时区问题
Mar 26 PHP
支持数组的ADDSLASHES的php函数
Feb 16 PHP
php源代码安装常见错误与解决办法分享
May 28 PHP
php计算两个日期时间差(返回年、月、日)
Jun 19 PHP
浅析PHP程序设计中的MVC编程思想
Jul 28 PHP
PHP产生不重复随机数的5个方法总结
Nov 12 PHP
php反射类ReflectionClass用法分析
May 12 PHP
php获取excel文件数据
Apr 21 PHP
php通过各种函数判断0和空
Jul 04 PHP
使用SMB共享来绕过php远程文件包含的限制执行RFI的利用
May 31 PHP
PHP使用 Pear 进行安装和卸载包的方法详解
Jul 08 PHP
解决Laravel5.2 Auth认证退出失效的问题
Oct 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
关于拼配咖啡,你要知道
2021/03/03 咖啡文化
zf框架的zend_cache缓存使用方法(zend框架)
2014/03/14 PHP
php操作xml入门之xml标签的属性分析
2015/01/23 PHP
php类常量用法实例分析
2015/07/09 PHP
PHP中Static(静态)关键字功能与用法实例分析
2019/04/05 PHP
Easy.Ajax 部分源代码 支持文件上传功能, 兼容所有主流浏览器
2011/02/24 Javascript
如何用ajax来创建一个XMLHttpRequest对象
2012/12/10 Javascript
关于网页中的无缝滚动的js代码
2016/06/09 Javascript
bootstrap table实例详解
2017/01/06 Javascript
纯JS单页面赛车游戏制作代码分享
2017/03/03 Javascript
JavaScript函数表达式详解及实例
2017/05/05 Javascript
Windows下快速搭建NodeJS本地服务器的步骤
2017/08/09 NodeJs
浅谈vue的几种绑定变量的值 防止其改变的方法
2018/03/01 Javascript
js变量声明var使用与不使用的区别详解
2019/01/21 Javascript
小程序实现新用户判断并跳转激活的方法
2019/05/20 Javascript
vue的webcamjs集成方式
2020/11/16 Javascript
python使用rsa加密算法模块模拟新浪微博登录
2014/01/22 Python
跟老齐学Python之私有函数和专有方法
2014/10/24 Python
python过滤中英文标点符号的实例代码
2019/07/15 Python
AUC计算方法与Python实现代码
2020/02/28 Python
Python基于xlutils修改表格内容过程解析
2020/07/28 Python
Python利用命名空间解析XML文档
2020/08/10 Python
python的scipy.stats模块中正态分布常用函数总结
2021/02/19 Python
CSS3 按钮边框动画的实现
2020/11/12 HTML / CSS
苹果中国官方网站:Apple中国
2016/07/22 全球购物
Clarks鞋法国官方网站:英国其乐鞋品牌
2018/02/11 全球购物
大学生最常用的自我评价
2013/12/07 职场文书
演讲稿怎么写
2014/01/07 职场文书
校园十大歌手策划书
2014/02/01 职场文书
《生命的药方》教学反思
2014/04/08 职场文书
运动会演讲稿50字
2014/08/25 职场文书
2015年世界环境日活动总结
2015/02/11 职场文书
学习新党章心得体会2016
2016/01/15 职场文书
PyQt5结合QtDesigner实现文本框读写操作
2021/06/11 Python
java objectUtils 使用可能会出现的问题
2022/02/28 Java/Android
Windows Server 2022 超融合部署(图文教程)
2022/06/25 Servers