curl和libcurl的区别简介


Posted in PHP onJuly 01, 2015

curl简介

curl是利用URL语法在命令行方式下工作的开源文件传输工具。
它支持很多协议:DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet and TFTP。
curl同样支持SSL证书,HTTP POST, HTTP PUT,FTP上传,基于表单的HTTP上传,代理(proxies)、cookies、用户名/密码认证(Basic, Digest, NTLM等)、下载文件断点续传,上载文件断点续传(file transfer resume),http代理服务器管道(proxy tunneling)以及其他特性。
curl是瑞典curl组织开发的,curl的官网是http://curl.haxx.se/,可以从官网获取它的源代码和相关说明。

libcurl简介

libcurl为一个免费开源的,客户端url传输库,支持DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet and TFTP等协议。
同curl一样,libcurl也支持SSL证书,HTTP POST, HTTP PUT,FTP上传,基于表单的HTTP上传,代理(proxies)、cookies、用户名/密码认证(Basic, Digest, NTLM等)、下载文件断点续传,上载文件断点续传(file transfer resume),http代理服务器管道(proxy tunneling)等。

libcurl是高度可移植的,可以工作在不同的平台上,支持Windows,Unix,Linux等。

libcurl是免费的,线程安全的,IPV6兼容的,同事它还有很多其他非常丰富的特性。libcurl已经被很多知名的大企业以及应用程序所采用。
可以在这里获取libcurl的源码及相关文档。

curl与libcurl对比

相同点

curl和libcurl都可以利用多种多样的协议来传输文件,包括HTTP, HTTPS, FTP, FTPS, GOPHER, LDAP, DICT, TELNET and FILE等。

不同点

curl是命令行工具,可以通过shell或脚本来运行curl。curl底层所使用的库是libcurl。
libcurl是一个库,通常与别的程序绑定在一起使用,如命令行工具curl就是封装了libcurl库。所以我们也可以在你自己的程序或项目中使用libcurl以获得类似CURL的强大功能。接下来将要介绍的PHP扩展就是对curl的一个封装。

几个名词

“curl”的不同意思

1.curl指的是curl命令行工具,可以从命令行或者脚本或者批处理文件中运行curl。curl创建于1998年,并且提供了100多个选项去控制它。
2.cURL是一个软件项目的名字。该软件项目包含了上面所说的curl和libcurl,并且都是开源的。
3.CURL通常用作PHP中libcurl扩展的名字。这个扩展确保了PHP程序员在程序中可以访问libcurl库所提供的功能。

curl—命令行工具

1.命令行工具,可以从shell或者脚本中运行该工具。
2.提供了130多种不同的“flags”
3.通常被用来模拟浏览器的行为
4.跨平台

libcurl—库

1.用作其他程序的开发库
2.可以与许多语言想结合,如PHP、C++
3.跨平台
4.提供了多种不同的使用它的APIs

PHP中使用curl和libcurl

PHP中使用curl

在PHP中使用curl非常简单,只要调用PHP中几个执行系统命令的相关函数即可。
代码示例:

$baidu=shell_exec("/usr/bin/curl -L http://www.baidu.com");  

var_dump($baidu);

PHP中使用libcurl

在PHP中使用libcurl,也就是我们通常所说的PHP中的“curl”。这部分的内容会在以后的文章中给出,这里只写出一个示例代码:

// FTP this script to a server

$fp = fopen(__FILE__, "r");

$url = "ftp://username:password@mydomain.com:21/path/to/newfile.php";

$ch = curl_init();    

curl_setopt($ch, CURLOPT_URL, $url); 

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

curl_setopt($ch, CURLOPT_UPLOAD, 1); 

curl_setopt($ch, CURLOPT_INFILE, $fp); 

curl_setopt($ch, CURLOPT_FTPASCII, 1); 

curl_setopt($ch, CURLOPT_INFILESIZE, filesize(__FILE__)); 

$result = curl_exec($ch); 

curl_close($ch);

使用curl还是libcurl?

使用curl还是libcurl这个需要根据具体的情况而定。例如,当有一个定时脚本在远程服务器的文件改变时发送邮件或者当前PHP环境不支持libcurl时,我们应该使用curl。否则,我们使用libcurl即可。

PHP 相关文章推荐
php更改目录及子目录下所有的文件后缀的代码
Sep 24 PHP
PHP5.5和之前的版本empty函数的不同之处
Jun 13 PHP
php命令行(cli)下执行PHP脚本文件的相对路径的问题解决方法
May 25 PHP
php简单实现多维数组排序的方法
Sep 30 PHP
php 时间time与日期date之间的使用详解及区别
Nov 07 PHP
php事件驱动化设计详解
Nov 10 PHP
Zend Framework校验器Zend_Validate用法详解
Dec 09 PHP
php+Memcached实现简单留言板功能示例
Feb 15 PHP
thinkPHP5.0框架简单配置作用域的方法
Mar 17 PHP
yii2.0整合阿里云oss上传单个文件的示例
Sep 19 PHP
php curl优化下载微信头像的方法总结
Sep 07 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
Apr 04 PHP
PHP+Ajax实时自动检测是否联网的方法
Jul 01 #PHP
PHP超全局数组(Superglobals)介绍
Jul 01 #PHP
PHP中的类型提示(type hinting)功能介绍
Jul 01 #PHP
7个鲜为人知却非常实用的PHP函数
Jul 01 #PHP
什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
Jul 01 #PHP
php实现的网络相册图片防盗链完美破解方法
Jul 01 #PHP
PHP根据图片色界在不同位置加水印的方法
Jul 01 #PHP
You might like
PHP 读取和修改大文件的某行内容的代码
2009/10/30 PHP
解析在apache里面给php写虚拟目录的详细方法
2013/06/24 PHP
解决phpcms更换javascript的幻灯片代码调用图片问题
2014/12/26 PHP
WordPress中获取页面链接和标题的相关PHP函数用法解析
2015/12/17 PHP
php注册审核重点解析(数据访问)
2017/05/23 PHP
PHP单例模式简单用法示例
2017/06/23 PHP
详解php中serialize()和unserialize()函数
2017/07/08 PHP
php实现对文件压缩简单的方法
2019/09/29 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
2019/12/01 PHP
Javascript Global对象
2009/08/13 Javascript
jQuery获取地址栏参数插件(模仿C#)
2010/10/26 Javascript
Document:getElementsByName()使用方法及示例
2013/10/28 Javascript
jQuery实现滑动页面固定顶部显示(可根据显示位置消失与替换)
2015/10/28 Javascript
JS组件Bootstrap按钮组与下拉按钮详解
2016/05/10 Javascript
jquery easyui datagrid实现增加,修改,删除方法总结
2016/05/25 Javascript
Angular 2父子组件数据传递之@Input和@Output详解(下)
2017/07/05 Javascript
jQuery中ajax获取数据赋值给页面的实例
2017/12/31 jQuery
解决VUE-Router 同一页面第二次进入不刷新的问题
2020/07/22 Javascript
[02:16]DOTA2超级联赛专访Burning 逆袭需要抓住机会
2013/06/24 DOTA
详解Python中的序列化与反序列化的使用
2015/06/30 Python
使用Python脚本将文字转换为图片的实例分享
2015/08/29 Python
详解Python中的Descriptor描述符类
2016/06/14 Python
Python实现桶排序与快速排序算法结合应用示例
2017/11/22 Python
pandas中的DataFrame按指定顺序输出所有列的方法
2018/04/10 Python
python提取具有某种特定字符串的行数据方法
2018/12/11 Python
Opencv实现抠图背景图替换功能
2019/05/21 Python
Python文件路径名的操作方法
2019/10/30 Python
Python使用shutil模块实现文件拷贝
2020/07/31 Python
实现Python3数组旋转的3种算法实例
2020/09/16 Python
HTML5新特性之用SVG绘制微信logo
2016/02/03 HTML / CSS
H5混合开发app如何升级的方法
2018/01/10 HTML / CSS
美国摩托车头盔、零件、齿轮及配件商店:Cycle Gear
2019/06/12 全球购物
微信营销策划方案
2014/02/24 职场文书
论文诚信承诺书
2014/05/23 职场文书
教师反腐倡廉演讲稿
2014/09/03 职场文书
婚礼必备主持词范本!
2019/07/23 职场文书