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 相关文章推荐
关于JavaScript中var声明变量作用域的推断
Dec 16 Javascript
分享20款好玩的jQuery游戏
Apr 17 Javascript
基于JQuery实现的类似购物商城的购物车
Dec 06 Javascript
在jQuery ajax中按钮button和submit的区别分析
Oct 07 Javascript
标题过长使用javascript按字节截取字符串
Apr 24 Javascript
javascript实现表格排序 编辑 拖拽 缩放
Jan 02 Javascript
使用jQuery实现input数值增量和减量的方法
Jan 24 Javascript
jquery.cookie实现的客户端购物车操作实例
Dec 24 Javascript
jquery实现简单Tab切换菜单效果
Jul 17 Javascript
浅谈js函数三种定义方式 &amp; 四种调用方式 &amp; 调用顺序
Feb 19 Javascript
JS+jQuery实现注册信息的验证功能
Sep 26 jQuery
原生JS实现九宫格抽奖
Sep 13 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
PHP 超链接 抓取实现代码
2009/06/29 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
2017/11/12 PHP
laravel5 Eloquent 实现事务方式
2019/10/21 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
2020/03/27 PHP
说明你的Javascript技术很烂的五个原因
2011/04/26 Javascript
JavaScript通过正则表达式实现表单验证电话号码
2014/03/07 Javascript
改变状态栏文字的js代码
2014/06/13 Javascript
javascript进行数组追加方法小结
2014/06/16 Javascript
JavaScript闭包详解
2015/02/02 Javascript
Nodejs关于gzip/deflate压缩详解
2015/03/04 NodeJs
JQuery使用index方法获取Jquery对象数组下标的方法
2015/05/18 Javascript
jQuery实现打开页面渐现效果示例
2016/07/27 Javascript
jquery配合.NET实现点击指定绑定数据并且能够一键下载
2016/10/28 Javascript
Nodejs实现爬虫抓取数据实例解析
2018/07/05 NodeJs
Vue props 单向数据流的实现
2018/11/06 Javascript
express+vue+mongodb+session 实现注册登录功能
2018/12/06 Javascript
vue登录注册实例详解
2019/09/14 Javascript
Javascript confirm多种使用方法解析
2020/09/25 Javascript
[34:56]Ti4冒泡赛LGD vs Liquid 1
2014/07/14 DOTA
在django中,关于session的通用设置方法
2019/08/06 Python
关于Python核心框架tornado的异步协程的2种方法详解
2019/08/28 Python
Pytorch中index_select() 函数的实现理解
2019/11/19 Python
使用豆瓣源来安装python中的第三方库方法
2021/01/26 Python
CSS3 三维变形实现立体方块特效源码
2016/12/15 HTML / CSS
html5调用摄像头功能的实现代码
2018/05/07 HTML / CSS
戴尔英国官网:Dell英国
2017/05/27 全球购物
Under Armour西班牙官网:美国知名的高端功能性运动品牌
2018/12/12 全球购物
青奥会口号
2014/06/12 职场文书
乡镇群众路线教育实践活动整改措施
2014/10/04 职场文书
2014年煤矿工作总结
2014/11/24 职场文书
2015年档案管理员工作总结
2015/05/13 职场文书
化工厂员工工作总结
2015/10/15 职场文书
优秀共产党员主要事迹材料
2015/11/05 职场文书
Python爬虫数据的分类及json数据使用小结
2021/03/29 Python
python3.9之你应该知道的新特性详解
2021/04/29 Python
HTML+CSS 实现顶部导航栏菜单制作
2021/06/03 HTML / CSS