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 相关文章推荐
使用 eAccelerator加速PHP代码的目的
Mar 16 PHP
Can't create/write to file 'C:\WINDOWS\TEMP\...MYSQL报错解决方法
Jun 30 PHP
PHP表单验证的3个函数ISSET()、empty()、is_numeric()的使用方法
Aug 22 PHP
PHP MySQL应用中使用XOR运算加密算法分享
Aug 28 PHP
php获取用户IPv4或IPv6地址的代码
Nov 15 PHP
php跨域cookie共享使用方法
Feb 20 PHP
php检查日期函数checkdate用法实例
Mar 19 PHP
yii,CI,yaf框架+smarty模板使用方法
Dec 29 PHP
PHP session会话操作技巧小结
Sep 27 PHP
Yii2实现中国省市区三级联动实例
Feb 08 PHP
PHP+RabbitMQ实现消息队列的完整代码
Mar 20 PHP
Laravel 类和接口注入相关的代码
Oct 15 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
Discuz 模板语句分析及知识技巧
2009/08/21 PHP
apache+codeigniter 通过.htcaccess做动态二级域名解析
2012/07/01 PHP
解析php mysql 事务处理回滚操作(附实例)
2013/08/05 PHP
PHP getDocNamespaces()函数讲解
2019/02/03 PHP
JavaScript 格式字符串的应用
2010/03/29 Javascript
jQuery选择头像并实时显示的代码
2010/06/27 Javascript
jquery中ajax调用json数据的使用说明
2011/03/17 Javascript
什么是DOM(Document Object Model)文档对象模型
2012/03/05 Javascript
JavaScript中的eval()函数详解
2013/08/22 Javascript
JavaScript判断表单提交时哪个radio按钮被选中的方法
2015/03/21 Javascript
js+cookies实现悬浮购物车的方法
2015/05/25 Javascript
js添加绑定事件的方法
2016/05/15 Javascript
jQuery AJAX timeout 超时问题详解
2016/06/21 Javascript
深入理解JS中的Function.prototype.bind()方法
2016/10/11 Javascript
js模拟支付宝密码输入框
2017/04/11 Javascript
浅析JS中回调函数及用法
2018/07/25 Javascript
详解angularjs跨页面传参遇到的一些问题
2018/11/01 Javascript
JavaScript中如何对多维数组(矩阵)去重的实现
2019/12/04 Javascript
vue 导出文件,携带请求头token操作
2020/09/10 Javascript
[03:15]DOTA2-DPC中国联赛1月22日Recap集锦
2021/03/11 DOTA
Django自定义过滤器定义与用法示例
2018/03/22 Python
解决Python requests库编码 socks5代理的问题
2018/05/07 Python
python xlsxwriter创建excel图表的方法
2018/06/11 Python
Python3 实现串口两进程同时读写
2019/06/12 Python
Python3 A*寻路算法实现方式
2019/12/24 Python
python通过文本在一个图中画多条线的实例
2020/02/21 Python
详解Python遍历列表时删除元素的正确做法
2021/01/07 Python
介绍一下linux的文件权限
2014/07/20 面试题
MYSQL相比于其他数据库有哪些特点
2013/07/19 面试题
红旗团支部事迹材料
2014/01/27 职场文书
项目经理聘任书
2014/03/29 职场文书
应聘护士求职信
2014/07/21 职场文书
群众路线剖析材料(四风问题)
2014/10/08 职场文书
党的群众路线教育实践活动教师自我剖析材料
2014/10/09 职场文书
生日宴会祝酒词
2015/08/10 职场文书
Python PIL按比例裁剪图片
2022/05/11 Python