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 相关文章推荐
索趣科技的答案
Feb 07 Javascript
jquery 实现checkbox全选,反选,全不选等功能代码(奇数)
Oct 24 Javascript
JavaScript运行时库属性一览表
Mar 14 Javascript
jquery模拟LCD 时钟的html文件源代码
Jun 16 Javascript
JavaScript数组对象赋值用法实例
Aug 04 Javascript
js实现的下拉框二级联动效果
Apr 30 Javascript
JavaScript-html标题滚动效果的简单实现
Sep 08 Javascript
读Javascript高性能编程重点笔记
Dec 21 Javascript
Vue form表单动态添加组件实战案例
Sep 02 Javascript
移动端手指操控左右滑动的菜单
Sep 08 Javascript
Node配合WebSocket做多文件下载以及进度回传
Nov 07 Javascript
JavaScript中layim之整合右键菜单的示例代码
Feb 06 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实现建立多层级目录的方法
2014/07/19 PHP
PHP高手需要要掌握的知识点
2014/08/21 PHP
PHP中创建和验证哈希的简单方法实探
2015/07/06 PHP
clientX,pageX,offsetX,x,layerX,screenX,offsetLeft区别分析
2010/03/12 Javascript
JS 实现完美include载入实现代码
2010/08/05 Javascript
jQuery 源码分析笔记(3) Deferred机制
2011/06/19 Javascript
js模拟滚动条(横向竖向)
2013/02/22 Javascript
js+csss实现的一个带复选框的下拉框
2014/09/29 Javascript
2014 HTML5/CSS3热门动画特效TOP10
2014/12/07 Javascript
使用jquery组件qrcode生成二维码及应用指南
2015/02/22 Javascript
JS实现表格数据各种搜索功能的方法
2015/03/03 Javascript
JavaScript实现的圆形浮动标签云效果实例
2015/08/06 Javascript
js仿百度登录页实现拖动窗口效果
2016/03/11 Javascript
基于HTML模板和JSON数据的JavaScript交互(移动端)
2016/04/06 Javascript
AngularJS在IE下取数据总是缓存问题的解决方法
2016/08/05 Javascript
bootstrap datetimepicker日期插件超详细使用方法介绍
2017/02/23 Javascript
dropload.js插件下拉刷新和上拉加载使用详解
2017/10/20 Javascript
微信小程序利用Canvas绘制图片和竖排文字详解
2019/06/25 Javascript
Python复制目录结构脚本代码分享
2015/03/06 Python
Python多层嵌套list的递归处理方法(推荐)
2016/06/08 Python
python tensorflow基于cnn实现手写数字识别
2018/01/01 Python
flask中主动抛出异常及统一异常处理代码示例
2018/01/18 Python
Python数据持久化shelve模块用法分析
2018/06/29 Python
详解python-图像处理(映射变换)
2019/03/22 Python
用Python识别人脸,人种等各种信息
2019/07/15 Python
深入了解Django View(视图系统)
2019/07/23 Python
浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)
2019/08/12 Python
python requests更换代理适用于IP频率限制的方法
2019/08/21 Python
使用CSS3实现圆角,阴影,透明
2014/12/23 HTML / CSS
环法自行车赛官方商店:Le Tour de France
2017/08/27 全球购物
一套C++笔试题面试题
2012/06/06 面试题
歌颂祖国的演讲稿
2014/05/04 职场文书
学校献爱心活动总结
2014/07/08 职场文书
我们的节日元宵活动方案
2014/08/23 职场文书
党的群众路线整改落实情况汇报
2014/10/28 职场文书
退休劳动合同怎么写?
2019/10/25 职场文书