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 相关文章推荐
一个程序下载的管理程序(二)
Oct 09 PHP
用PHP和ACCESS写聊天室(四)
Oct 09 PHP
《PHP边学边教》(02.Apache+PHP环境配置――上篇)
Dec 13 PHP
php使用Smarty的相关注意事项及访问变量的几种方式
Dec 08 PHP
php常用的url处理函数总结
Nov 19 PHP
PHP里8个鲜为人知的安全函数分析
Dec 09 PHP
php获取汉字拼音首字母的方法
Oct 21 PHP
php实现当前页面点击下载文件的简单方法
Sep 22 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
Aug 31 PHP
PHP时间戳和日期相互转换操作实例小结
Dec 18 PHP
如何在Laravel5.8中正确地应用Repository设计模式
Nov 26 PHP
Git命令之分支详解
Mar 02 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带密码功能并下载远程文件保存本地指定目录 修改加强版
2010/05/16 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(五)
2014/06/23 PHP
PHP中魔术变量__METHOD__与__FUNCTION__的区别
2014/09/29 PHP
javascript之解决IE下不渲染的bug
2007/06/29 Javascript
Javascript 面向对象 继承
2010/05/13 Javascript
ajax上传时参数提交不更新等相关问题
2012/12/11 Javascript
js比较和逻辑运算符的介绍
2013/03/10 Javascript
JS将数字转换成三位逗号分隔的样式(示例代码)
2014/02/19 Javascript
js实现左侧网页tab滑动门效果代码
2015/09/06 Javascript
基于jquery实现鼠标滚轮驱动的图片切换效果
2015/10/26 Javascript
BootStrap 智能表单实战系列(二)BootStrap支持的类型简介
2016/06/13 Javascript
js enter键激发事件实例代码
2016/08/17 Javascript
微信小程序--组件(swiper)详细介绍
2017/06/13 Javascript
web前端vue之CSS过渡效果示例
2018/01/10 Javascript
ES6关于Promise的用法详解
2018/05/07 Javascript
JavaScript的Proxy可以做哪些有意思的事儿
2019/06/15 Javascript
JavaScript 俄罗斯方块游戏实现方法与代码解释
2020/04/08 Javascript
[01:14]2019完美世界城市挑战赛(秋季赛)全国总决赛精彩花絮
2020/01/08 DOTA
[01:01]2020完美高校联赛(秋)西安落幕
2021/03/11 DOTA
Flask框架Jinjia模板常用语法总结
2018/07/19 Python
使用Python快速制作可视化报表的方法
2019/02/03 Python
Python实现的序列化和反序列化二叉树算法示例
2019/03/02 Python
python实现移位加密和解密
2019/03/22 Python
python机器人运动范围问题的解答
2019/04/29 Python
Python3标准库之threading进程中管理并发操作方法
2020/03/30 Python
Python中zipfile压缩文件模块的基本使用教程
2020/06/14 Python
python编写扎金花小程序的实例代码
2021/02/23 Python
用css3实现转换过渡和动画效果
2020/03/13 HTML / CSS
CSS3 实现弹跳的小球动画
2020/10/26 HTML / CSS
新秀丽官方旗舰店:Samsonite拉杆箱、双肩包、皮具
2018/03/05 全球购物
澳大利亚百货商店中销量第一的商务衬衫品牌:Van Heusen
2018/07/26 全球购物
萨克斯第五大道英国:Saks Fifth Avenue英国
2019/04/01 全球购物
给老婆的搞笑检讨书
2014/01/12 职场文书
疾病证明书
2015/06/19 职场文书
用Python爬虫破解滑动验证码的案例解析
2021/05/06 Python
Python实现信息轰炸工具(再也不怕说不过别人了)
2021/06/11 Python