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 数组的合并、拆分、区别取值函数集
Feb 15 PHP
数组与类使用PHP的可变变量名需要的注意的问题
Jun 20 PHP
php中jpgraph类库的使用介绍
Aug 08 PHP
php设计模式之简单工厂模式详解
Sep 04 PHP
PHP获取mysql数据表的字段名称和详细信息的方法
Sep 27 PHP
PHP操作MySQL事务实例
Nov 05 PHP
解决更换PHP5.4以上版本后Dedecms后台登录空白问题的方法
Oct 23 PHP
详谈php中 strtr 和 str_replace 的效率问题
May 14 PHP
详解Yii2 之 生成 URL 的方法
Jun 16 PHP
thinkPHP通用控制器实现方法示例
Nov 23 PHP
Laravel5.7框架安装与使用学习笔记图文详解
Apr 02 PHP
PHP 计算至少是其他数字两倍的最大数的实现代码
May 26 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五种设计模式小结
2011/03/23 PHP
解析thinkphp import 文件内容变量失效的问题
2013/06/20 PHP
详解php用curl调用接口方法,get和post两种方式
2017/01/13 PHP
Jquery中getJSON在asp.net中的使用说明
2011/03/10 Javascript
使用jquery实现div的tab切换实例代码
2013/05/27 Javascript
jquery获取URL中参数解决中文乱码问题的两种方法
2013/12/18 Javascript
js菜单点击显示或隐藏效果的简单实例
2014/01/13 Javascript
js 动态为textbox添加下拉框数据源的方法
2014/04/24 Javascript
Jquery中$.post和$.ajax的用法小结
2015/04/28 Javascript
javascript弹出拖动窗口
2015/08/11 Javascript
谷歌showModalDialog()方法不兼容出现对话窗口的解决办法
2016/02/15 Javascript
最丑的时钟效果!js canvas时钟制作方法
2016/08/15 Javascript
Vue2.0实现将页面中表格数据导出excel的实例
2017/08/09 Javascript
利用jquery如何从json中读取数据追加到html中
2017/12/01 jQuery
[04:29]2016国际邀请赛中国区预选赛Ehome战队教练采访
2016/06/27 DOTA
[01:13:46]iG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
利用标准库fractions模块让Python支持分数类型的方法详解
2017/08/11 Python
python+selenium实现163邮箱自动登陆的方法
2017/12/31 Python
使用pandas的DataFrame的plot方法绘制图像的实例
2018/05/24 Python
Python实现求两个数组交集的方法示例
2019/02/23 Python
python中enumerate() 与zip()函数的使用比较实例分析
2019/09/03 Python
python脚本实现音频m4a格式转成MP3格式的实例代码
2019/10/09 Python
解决tensorboard多个events文件显示紊乱的问题
2020/02/15 Python
css3简单练习实现遨游浏览器logo的绘制
2013/01/30 HTML / CSS
CSS3中background-clip和background-origin的区别示例介绍
2014/03/10 HTML / CSS
Html5踩坑记之mandMobile使用小记
2020/04/02 HTML / CSS
意大利咖啡、浓缩咖啡和浓缩咖啡机:illy caffe
2019/03/20 全球购物
彪马法国官网:PUMA法国
2019/12/15 全球购物
英文简历中的自我评价
2013/10/06 职场文书
厨房工作人员岗位职责
2013/11/15 职场文书
电子商务个人职业生涯规划范文
2014/02/12 职场文书
临时用工协议书范本
2014/10/29 职场文书
周一给客户的问候语
2015/11/10 职场文书
Python基础详解之描述符
2021/04/28 Python
Pycharm 如何设置HTML文件自动补全代码或标签
2021/05/21 Python
Win11控制面板快捷键是什么?Win11打开控制面板的方法汇总
2022/07/07 数码科技