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 相关文章推荐
BBS(php &amp; mysql)完整版(七)
Oct 09 PHP
PHP函数utf8转gb2312编码
Dec 21 PHP
php中explode与split的区别介绍
Oct 03 PHP
Apache服务器无法使用的解决方法
May 08 PHP
qq登录,新浪微博登录接口申请过程中遇到的问题
Jul 22 PHP
php验证session无效的解决方法
Nov 04 PHP
PHP图片处理之使用imagecopy函数添加图片水印实例
Nov 19 PHP
php强制用户转向www域名的方法
Jun 19 PHP
微信支付PHP SDK ―― 公众号支付代码详解
Sep 13 PHP
详解PHP处理密码的几种方式
Nov 30 PHP
Mac下php 5升级到php 7的步骤详解
Apr 26 PHP
PHP设计模式(七)组合模式Composite实例详解【结构型】
May 02 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环境――Appserv
2006/12/13 PHP
php预定义常量
2006/12/25 PHP
php笔记之:AOP的应用
2013/04/24 PHP
解析如何用php screw加密php源代码
2013/06/20 PHP
php实现window平台的checkdnsrr函数
2015/05/27 PHP
浅析Yii2 GridView 日期格式化并实现日期可搜索教程
2016/04/22 PHP
php检测mysql表是否存在的方法小结
2017/07/20 PHP
php中使用array_filter()函数过滤数组实例讲解
2021/03/03 PHP
改善你的jQuery的25个步骤 千倍级效率提升
2010/02/11 Javascript
js怎么覆盖原有方法实现重写
2014/09/04 Javascript
iframe中子父类窗口调用JS的方法及注意事项
2015/08/25 Javascript
基于jQuery实现淡入淡出效果轮播图
2020/07/31 Javascript
初探nodeJS
2017/01/24 NodeJs
Bootstrap框架建立树形菜单(Tree)的实例代码
2017/10/30 Javascript
对node.js中render和send的用法详解
2018/05/14 Javascript
微信小程序功能之全屏滚动效果的实现代码
2018/11/22 Javascript
VueX模块的具体使用(小白教程)
2020/06/05 Javascript
JavaScript前后端JSON使用方法教程
2020/11/23 Javascript
[01:16:37]【全国守擂赛】第三周决赛 Dark Knight vs. 一个弱队
2020/05/04 DOTA
使用python在校内发人人网状态(人人网看状态)
2014/02/19 Python
python使用Queue在多个子进程间交换数据的方法
2015/04/18 Python
python实现按行切分文本文件的方法
2016/04/18 Python
Python3 Click模块的使用方法详解
2020/02/12 Python
Python安装与卸载流程详细步骤(图解)
2020/02/20 Python
Pycharm配置PyQt5环境的教程
2020/04/02 Python
快速解决jupyter notebook启动需要密码的问题
2020/04/21 Python
使用html2canvas.js实现页面截图并显示或上传的示例代码
2018/12/18 HTML / CSS
html5用video标签流式加载的实现
2020/05/20 HTML / CSS
体育系毕业生自荐信
2014/06/28 职场文书
七一建党日演讲稿
2014/09/05 职场文书
客户答谢会致辞
2015/01/20 职场文书
python 爬取豆瓣网页的示例
2021/04/13 Python
浅谈Laravel中使用Slack进行异常通知
2021/05/29 PHP
再次探讨go实现无限 buffer 的 channel方法
2021/06/13 Golang
pycharm代码删除恢复的方法
2021/06/26 Python
windows server2008 开启端口的实现方法
2022/06/25 Servers