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 相关文章推荐
基于asp+ajax和数据库驱动的二级联动菜单
May 06 PHP
10条PHP高级技巧[修正版]
Aug 02 PHP
codeigniter使用技巧批量插入数据实例方法分享
Dec 31 PHP
php的declare控制符和ticks教程(附示例)
Mar 21 PHP
php采用ajax数据提交post与post常见方法总结
Nov 10 PHP
JavaScript实现滚动栏效果的方法
Apr 27 PHP
PHP仿微信多图片预览上传实例代码
Sep 13 PHP
利用PHP抓取百度阅读的方法示例
Dec 18 PHP
php生成图片缩略图功能示例
Feb 22 PHP
简单谈谈PHP中的trait
Feb 25 PHP
YII框架http缓存操作示例
Apr 29 PHP
ThinkPHP5框架中使用JWT的方法示例
Jun 03 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
星际争霸任务指南——虫族
2020/03/04 星际争霸
PHP 事务处理数据实现代码
2010/05/13 PHP
sql注入与转义的php函数代码
2013/06/17 PHP
php基于session锁防止阻塞请求的方法分析
2017/08/07 PHP
PHP编译configure时常见错误的总结
2017/08/17 PHP
PHP的mysqli_sqlstate()函数讲解
2019/01/23 PHP
用 JSON 处理缓存
2007/04/27 Javascript
javascript判断两个IP地址是否在同一个网段的实现思路
2013/12/13 Javascript
在jquery中的ajax方法怎样通过JSONP进行远程调用
2014/04/04 Javascript
使用text方法获取Html元素文本信息示例
2014/09/01 Javascript
拥Bootstrap入怀——导航栏篇
2016/05/30 Javascript
浅析script标签中的defer与async属性
2016/11/30 Javascript
nodejs mysql 实现分页的方法
2017/06/06 NodeJs
原生JS控制多个滚动条同步跟随滚动效果
2017/12/22 Javascript
使用Vue实现图片上传的三种方式
2018/07/17 Javascript
React Native开发封装Toast与加载Loading组件示例
2018/09/08 Javascript
vue 利用路由守卫判断是否登录的方法
2018/09/29 Javascript
如何解决webpack-dev-server代理常切换问题
2019/01/09 Javascript
15分钟深入了解JS继承分类、原理与用法
2019/01/19 Javascript
javascript中floor使用方法总结
2019/02/02 Javascript
Python基于scapy实现修改IP发送请求的方法示例
2017/07/08 Python
scrapy爬虫完整实例
2018/01/25 Python
全面分析Python的优点和缺点
2018/02/07 Python
python获取地震信息 微信实时推送
2019/06/18 Python
Pyqt5 基本界面组件之inputDialog的使用
2019/06/25 Python
pandas通过字典生成dataframe的方法步骤
2019/07/23 Python
Python数据可视化:箱线图多种库画法
2019/11/06 Python
TensorFlow内存管理bfc算法实例
2020/02/03 Python
Python气泡提示与标签的实现
2020/04/01 Python
Python Selenium XPath根据文本内容查找元素的方法
2020/12/07 Python
玩具反斗城美国官网:Toys"R"Us
2016/09/17 全球购物
资生堂英国官网:Shiseido英国
2020/12/30 全球购物
市场营销专业毕业生求职信
2014/03/26 职场文书
供应链金融服务方案
2014/05/25 职场文书
指导教师推荐意见
2015/06/05 职场文书
Python用tkinter实现自定义记事本的方法详解
2022/03/31 Python