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 相关文章推荐
脚本收藏iframe
Jul 21 Javascript
jquery.pagination.js 无刷新分页实现步骤分享
May 23 Javascript
js 中的switch表达式使用示例
Jun 03 Javascript
JS组件Bootstrap Table使用实例分享
May 30 Javascript
让你一句话理解闭包(简单易懂)
Jun 03 Javascript
微信小程序 开发之快递查询功能的实现
Jan 09 Javascript
JS查找英文文章中出现频率最高的单词
Mar 20 Javascript
ReactNative 之FlatList使用及踩坑封装总结
Nov 29 Javascript
微信小程序自定义组件封装及父子间组件传值的方法
Aug 28 Javascript
vue实现多组关键词对应高亮显示功能
Jul 25 Javascript
Vue.js页面中有多个input搜索框如何实现防抖操作
Nov 04 Javascript
bootstrap-closable-tab可实现关闭的tab标签页插件
Aug 09 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 将图片按创建时间进行分类存储的实现代码
2010/01/05 PHP
解析php中获取url与物理路径的总结
2013/06/21 PHP
php实现图片添加描边字和马赛克的方法
2014/12/10 PHP
PHP缓冲区用法总结
2016/02/14 PHP
PHP发送AT指令实例代码
2016/05/26 PHP
laravel创建类似ThinPHP中functions.php的全局函数
2016/11/26 PHP
php实现水印文字和缩略图的方法示例
2016/12/29 PHP
YUI 读码日记之 YAHOO.util.Dom - Part.1
2008/03/22 Javascript
jQuery 位置函数offset,innerWidth,innerHeight,outerWidth,outerHeight,scrollTop,scrollLeft
2010/03/23 Javascript
原来Jquery.load的方法可以一直load下去
2011/03/28 Javascript
JavaScript执行效率与性能提升方案
2012/12/21 Javascript
js判断字符长度以及中英文数字等
2013/12/31 Javascript
给应用部分的js代码设定一个统一的入口
2014/06/15 Javascript
javascript模拟评分控件实现方法
2015/05/13 Javascript
js时钟翻牌效果实现代码分享
2020/07/31 Javascript
JavaScript原生xmlHttp与jquery的ajax方法json数据格式实例
2015/12/04 Javascript
浅析AMD CMD CommonJS规范--javascript模块化加载学习心得总结
2016/03/16 Javascript
JavaScript学习笔记之数组求和方法
2016/03/23 Javascript
jq实现左滑显示删除按钮,点击删除实现删除数据功能(推荐)
2016/08/23 Javascript
详解JavaScript中的属性和特性
2016/12/08 Javascript
JS使用正则截取两个字符串之间的字符串实现方法详解
2017/01/06 Javascript
Angularjs分页查询的实现
2017/02/24 Javascript
Vue 动态设置路由参数的案例分析
2018/04/24 Javascript
layer父页获取弹出层输入框里面的值方法
2019/09/02 Javascript
js实现盒子拖拽动画效果
2020/08/09 Javascript
javascript贪吃蛇游戏设计与实现
2020/09/17 Javascript
python操作字典类型的常用方法(推荐)
2016/05/16 Python
python采用django框架实现支付宝即时到帐接口
2016/05/17 Python
python微元法计算函数曲线长度的方法
2018/11/08 Python
Tensorflow不支持AVX2指令集的解决方法
2020/02/03 Python
把Anaconda中的环境导入到Pycharm里面的方法步骤
2020/10/30 Python
Linux操作面试题
2012/05/16 面试题
演讲稿格式
2014/04/30 职场文书
2016国培研修心得体会
2016/01/08 职场文书
MySQL 慢查询日志深入理解
2021/04/22 MySQL
Python 操作pdf pdfplumber读取PDF写入Exce
2022/08/14 Python