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的PHP XML类
Oct 09 PHP
php设计模式 Observer(观察者模式)
Jun 26 PHP
php从数组中随机抽取一些元素的代码
Nov 05 PHP
PHP函数preg_match_all正则表达式的基本使用详细解析
Aug 31 PHP
ThinkPHP结合ajax、Mysql实现的客户端通信功能代码示例
Jun 23 PHP
Laravel框架表单验证详解
Sep 04 PHP
php上传文件并存储到mysql数据库的方法
Mar 16 PHP
适用于初学者的简易PHP文件上传类
Oct 29 PHP
4种PHP异步执行的常用方式
Dec 24 PHP
php基于curl实现随机ip地址抓取内容的方法
Oct 11 PHP
PHP实现统计在线人数功能示例
Oct 15 PHP
yii2.0框架实现上传excel文件后导入到数据库的方法示例
Apr 13 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中session过期时间设置及session回收机制介绍
2014/05/05 PHP
yii2使用gridView实现下拉列表筛选数据
2017/04/10 PHP
PHP+redis实现微博的推模型案例分析
2019/07/10 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
javascript 建设银行登陆键盘
2008/06/10 Javascript
javascript 窗口加载蒙板 内嵌网页内容
2010/11/19 Javascript
js 连接数据库如何操作数据库中的数据
2012/11/23 Javascript
ajax处理php返回json数据的实例代码
2013/01/24 Javascript
Extjs中ComboBoxTree实现的下拉框树效果(自写)
2013/05/28 Javascript
js中的preventDefault与stopPropagation详解
2014/01/29 Javascript
JS点击链接后慢慢展开隐藏着图片的方法
2015/02/17 Javascript
javascript嵌套函数和在函数内调用外部函数的区别分析
2016/01/31 Javascript
JavaScript脚本语言是什么_动力节点Java学院整理
2017/06/26 Javascript
js移动端事件基础及常用事件库详解
2017/08/15 Javascript
基于canvas粒子系统的构建详解
2017/08/31 Javascript
深入理解Vue2.x的虚拟DOM diff原理
2017/09/27 Javascript
使用socket.io实现简单聊天室案例
2018/01/02 Javascript
js console.log打印对象时属性缺失的解决方法
2019/05/23 Javascript
p5.js临摹旋转爱心
2019/10/23 Javascript
[01:02:04]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
使用Python写个小监控
2016/01/27 Python
将Django项目部署到CentOs服务器中
2018/10/18 Python
调用其他python脚本文件里面的类和方法过程解析
2019/11/15 Python
用Python生成HTML表格的方法示例
2020/03/06 Python
PyCharm Community安装与配置的详细教程
2020/11/24 Python
阿迪达斯丹麦官网:adidas丹麦
2016/10/01 全球购物
印度尼西亚最大和最全面的网络商城:Blibli.com
2017/10/04 全球购物
法学院方阵解说词
2014/01/29 职场文书
文明餐桌行动实施方案
2014/02/19 职场文书
运动会稿件100字
2014/02/21 职场文书
一份教室追逐打闹的检讨书
2014/09/27 职场文书
干部作风建设工作总结
2014/10/29 职场文书
考试没考好检讨书
2015/05/06 职场文书
小米11和iphone12哪个值得买?小米11对比iphone12评测
2021/04/21 数码科技
python中出现invalid syntax报错的几种原因分析
2022/02/12 Python
vue3语法糖内的defineProps及defineEmits
2022/04/14 Vue.js