PHP中CURL的几个经典应用实例


Posted in Javascript onJanuary 23, 2015

1、cURL请求的基本步骤:

(1)初始化
(2)设置选项,包括URL
(3)执行并获取HTML文档内容
(4)释放cURL句柄

<?php

    //1、初始化

    $ch = curl_init();
    //2、设置选项,包括URL

    curl_setopt($ch, CURLOPT_URL, "http://www.cnblogs.com/it-cen/");
    //将curl_exec()获取的信息以文件流的形式返回,而不是直接输出

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    //启动时会将头文件的信息作为数据流输出

    curl_setopt($ch, CURLOPT_HEADER, 1);
    //3、执行并获取HTML文档内容

    curl_exec($ch);
    //4、释放句柄

    curl_close($ch);
    echo $ch;
?>

注意:第二步最重要,也就是curl_setopt()函数

我们可以加一段检查错误的语句,这里要注意用的是"===false",这是为了区分空输出和布尔值false

$output = curl_exec($ch);

 

     if ($output === false) {

         echo "cURL Error:".curl_error($ch);

     }

curl_getinfo()函数返回cURL执行后这一请求相关的信息,这对调试和排错很有用:

 curl_exec($ch);

     $info = curl_getinfo($ch);

     echo '<pre>';

     print_r($info);    

     echo '</pre>';

返回的数据

Array

(

    [url] => http://www.cnblogs.com/it-cen/

    [content_type] => text/html; charset=utf-8

    [http_code] => 200

    [header_size] => 312

    [request_size] => 61

    [filetime] => -1

    [ssl_verify_result] => 0

    [redirect_count] => 0

    [total_time] => 0.172

    [namelookup_time] => 0.016

    [connect_time] => 0.063

    [pretransfer_time] => 0.063

    [size_upload] => 0

    [size_download] => 14658
 <span style="color: #ff0000;"> //请求的数据大小</span>

    [speed_download] => 85220



    [speed_upload] => 0

    [download_content_length] => 14658

    [upload_content_length] => 0

    [starttransfer_time] => 0.125

    [redirect_time] => 0

    [certinfo] => Array

        (

        )

 

    [redirect_url] => 

)

2、这些信息在调试很有用,例如在cURL抓取的时候,可能由于网络等原因,时常出现抓取数据不完整的情况,这是我们可以通过所获取的数据计算filesize,然后和curl_getinfo()获取的进行比较,如果大小相等,就认定下载正确,否则进行重复尝试。

 下面我们看一个抓取图片的例子:
 

 <?php

    header("Content-Type: image/png");
    //1、初始化

    $ch = curl_init();
    //2、设置选项,包括URL

    curl_setopt($ch, , CURLOPT_URL, "http://img04.taobaocdn.com/tfscom/TB1omaTHXXXXXajXVXXtKXbFXXX.png");

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    curl_setopt($ch, CURLOPT_HEADER, 1);
    //3、执行并获取内容

    $res = curl_exec($ch);
    //获取信息

    $info = curl_getinfo($ch);
    //4、释放资源

    curl_close($ch);
    file_put_contents("d:/aa.png", $res);
    $size = filesize("d:/aa.png");
    if ($size != $info['size_download']) {

        echo "下载的数据不完整,请重新下载";

    } else {

        echo "下载数据完整";

    }


?>

 

 3、在cURL中用POST方法发送数据

 

 <?php

    $ch = curl_init();
    $data = array('name'=>'kelly', 'age'=>27, 'sex'=>1);
    curl_setopt($ch, CURLOPT_URL, "http://localhost.post.php");

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    //设置为post

    curl_setopt($ch, CURLOPT_POST, 1);

    //把post的变量加上

    curl_setopt($ch, CURLOPT_POSTFIELDS,$data);
    $res = curl_exec($ch);
    curl_close($ch);
    echo $res;


?>

 

用此方法可以模拟留言,或者可以坐灌水机器人,思路都是一样的

4、用cURL上传文件

<?php

    //索要上传的数据

    $data = array('name'=>'beauty', "upload"=>"@a.zip");
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "http://127.0.0.1/Socket/upload_file.php");

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);

    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    $res = curl_exec($ch);
    curl_close($ch);
    echo $res;
?>

注意:要发送文件时,要在文件名前面加上  @  前缀并使用完整路径

 5、cURL设置项

其实,cURL有许多配置选项,这些选项才是cURL的灵魂,通过setopt()设置,下面总结几个比较常见且重要的配置项,希望在对读者在以后用到cURL时有一定的帮助:

CURLOPT_AUTOREFERER:当根据location:重定向时,自动设置header中的Referer:信息

CURLOPT_COOKIESESSION:启用时cURL会紧紧传递一个sessioncookie,忽略其他cookie

CURLOPT_HEADER:将头文件的信息作为数据流输出

CURLOPT_INFILESIZE:设置上传文件的大小,单位为字节

CURLOPT_MAXCONNECTS:允许最大连接数量

CURLOPT_MAXREDIRS:指定HTTP重定向的最多数量

CURLOPT_COOKIE:设置HTTP请求中“cookie:”部分的内容,多个cookie用分号跟个,分号后带一个空格

CURLOPT_POSTFIELDS:全部数据用HTTP协议中的“POST”操作发送要发送文件,在文件名前面加上@前缀并使用完整路径

.......

具体更多配置项请参考PHP手册

 

cURL功能很强大,它是一个通用的库,并非PHP独有。

希望读者通过本博文的几个经典cURL例子的学习能有所收获。

Javascript 相关文章推荐
基于jQuery的自动完成插件
Feb 03 Javascript
javascript之典型高阶函数应用介绍二
Jan 10 Javascript
jquery做的一个简单的屏幕锁定提示框
Mar 26 Javascript
js函数模拟显示桌面.scf程序示例
Apr 20 Javascript
Javascript中的作用域和上下文深入理解
Jul 03 Javascript
深入解析JavaScript编程中的this关键字使用
Nov 09 Javascript
vue实现全选、反选功能
Nov 17 Javascript
Vue Transition实现类原生组件跳转过渡动画的示例
Aug 19 Javascript
Layui 数据表格批量删除和多条件搜索的实例
Sep 04 Javascript
改变layer confirm弹窗按钮的颜色方法
Sep 12 Javascript
使用JS location实现搜索框历史记录功能
Dec 23 Javascript
js面试题之异步问题的深入理解
Sep 20 Javascript
Javascript闭包用法实例分析
Jan 23 #Javascript
JavaScript学习笔记之Function对象
Jan 22 #Javascript
JavaScript学习笔记之Cookie对象
Jan 22 #Javascript
javascript二维数组转置实例
Jan 22 #Javascript
JavaScript学习笔记之内置对象
Jan 22 #Javascript
JavaScript学习笔记之JS事件对象
Jan 22 #Javascript
jquery实现搜索框常见效果的方法
Jan 22 #Javascript
You might like
re0第二季蕾姆被制作组打入冷宫!艾米莉亚女主扶正,原因唏嘘
2020/04/02 日漫
基于PHP生成静态页的实现方法
2013/05/10 PHP
php中的curl使用入门教程和常见用法实例
2014/04/10 PHP
CodeIgniter钩子用法实例详解
2016/01/20 PHP
[原创]php正则删除html代码中class样式属性的方法
2017/05/24 PHP
PHP基于PDO调用sqlserver存储过程通用方法【基于Yii框架】
2017/10/07 PHP
php+laravel依赖注入知识点总结
2019/11/04 PHP
Javascript实例教程(19) 使用HoTMetal(1)
2006/12/23 Javascript
JS控件autocomplete 0.11演示及下载 1月5日已更新
2007/01/09 Javascript
datePicker——日期选择控件(with jquery)
2007/02/20 Javascript
js实现网站首页图片滚动显示
2013/02/04 Javascript
artDialog双击会关闭对话框的修改过程分享
2013/08/05 Javascript
JavaScript实现的双向跨域插件分享
2015/01/31 Javascript
drag-and-drop实现图片浏览器预览
2015/08/06 Javascript
微信小程序 登录的简单实现
2017/04/19 Javascript
关于vue.js v-bind 的一些理解和思考
2017/06/06 Javascript
jQuery实现的简单图片轮播效果完整示例
2018/02/08 jQuery
解决vue热替换失效的根本原因
2018/09/19 Javascript
Vue分页器实现原理详解
2019/06/28 Javascript
vue开发拖拽进度条滑动组件
2019/09/21 Javascript
vuex + keep-alive实现tab标签页面缓存功能
2019/10/17 Javascript
[01:28:31]《加油DOTA》真人秀 第五期
2014/09/01 DOTA
[46:16]2018DOTA2亚洲邀请赛3月30日 小组赛B组 iG VS VP
2018/03/31 DOTA
[04:59]2018DOTA2亚洲邀请赛 4.7 Mineski夺冠时刻
2018/04/09 DOTA
Python3.5编程实现修改IIS WEB.CONFIG的方法示例
2017/08/18 Python
浅谈Tensorflow模型的保存与恢复加载
2018/04/26 Python
利用Python如何批量更新服务器文件
2018/07/29 Python
python将txt文件读入为np.array的方法
2018/10/30 Python
Python + selenium + crontab实现每日定时自动打卡功能
2020/03/31 Python
如何打包Python Web项目实现免安装一键启动的方法
2020/05/21 Python
波兰家居和花园家具专家:4Home
2019/05/26 全球购物
Interflora澳大利亚:同日鲜花速递
2019/06/25 全球购物
贷款担保申请书
2014/05/20 职场文书
小学生推普周国旗下讲话稿
2014/09/21 职场文书
关于颐和园的导游词
2015/01/30 职场文书
早上好问候语大全
2015/11/10 职场文书