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 03 PHP
PHP在特殊字符前加斜杠的实现代码
Jul 17 PHP
php加密算法之实现可逆加密算法和解密分享
Jan 21 PHP
浅析PHP文件下载原理
Dec 25 PHP
php中删除数组的第一个元素和最后一个元素的函数
Mar 07 PHP
PHP信号量基本用法实例详解
Feb 12 PHP
php读取txt文件并将数据插入到数据库
Feb 23 PHP
php结合mysql与mysqli扩展处理事务的方法
Jun 29 PHP
一个简单的php MVC留言本实例代码(必看篇)
Sep 22 PHP
PHP那些琐碎的知识点(整理)
May 20 PHP
thinkphp分页集成实例
Jul 24 PHP
PHP二维索引数组的遍历实例分析【2种方式】
Jun 24 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
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
解决Laravel blade模板转义html标签的问题
2019/09/03 PHP
jQuery 操作XML入门
2008/12/25 Javascript
理解JavaScript的caller,callee,call,apply
2009/04/28 Javascript
jquery 入门教程 [翻译] 推荐
2009/08/17 Javascript
基于Jquery的跨域传输数据(JSONP)
2011/03/10 Javascript
文件编码导致jquery失效的解决方法
2013/06/26 Javascript
JavaScript模拟实现键盘打字效果
2015/06/29 Javascript
javascript实现根据iphone屏幕方向调用不同样式表的方法
2015/07/13 Javascript
详解javascript实现瀑布流列式布局
2016/01/29 Javascript
plupload+artdialog实现多平台上传文件
2016/07/19 Javascript
javascript对浅拷贝和深拷贝的详解
2016/10/14 Javascript
bootstrap日历插件datetimepicker使用方法
2016/12/14 Javascript
使用vue-router为每个路由配置各自的title
2018/07/30 Javascript
微信小程序日历弹窗选择器代码实例
2019/05/09 Javascript
详解简单易懂的 ES6 Iterators 指南和示例
2019/09/24 Javascript
js new Date()实例测试
2019/10/31 Javascript
js正则匹配多个全部数据问题
2019/12/20 Javascript
[46:28]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
python通过BF算法实现关键词匹配的方法
2015/03/13 Python
Python3实现将文件树中所有文件和子目录归档到tar压缩文件的方法
2015/05/22 Python
python爬虫框架talonspider简单介绍
2017/06/09 Python
Python文件循环写入行时防止覆盖的解决方法
2018/11/09 Python
nginx搭建基于python的web环境的实现步骤
2020/01/03 Python
在keras中获取某一层上的feature map实例
2020/01/24 Python
python matplotlib包图像配色方案分享
2020/03/14 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
2020/05/12 Python
PyQt5实现画布小程序
2020/05/30 Python
基于CSS3 animation动画属性实现轮播图效果
2017/09/12 HTML / CSS
澳大利亚首屈一指的鞋类品牌:Tony Bianco
2018/03/13 全球购物
竟聘演讲稿范文
2013/12/31 职场文书
幼儿园教师岗位职责
2014/03/17 职场文书
销售队伍口号
2014/06/11 职场文书
golang goroutine顺序输出方式
2021/04/29 Golang
Python趣味爬虫之用Python实现智慧校园一键评教
2021/05/28 Python
Python操作CSV格式文件的方法大全
2021/07/15 Python