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获取url字符串截取路径的文件名和扩展名的函数
Jan 22 PHP
深入PHP变量存储的详解
Jun 13 PHP
PHP反射使用实例和PHP反射API的中文说明
Jul 02 PHP
PHP中常用的数组操作方法笔记整理
May 16 PHP
PHP编辑器PhpStrom运行缓慢问题
Feb 21 PHP
php中实现字符串翻转的方法
Feb 22 PHP
数组任意位置插入元素,删除特定元素的实例
Mar 02 PHP
PHP基于PDO实现的SQLite操作类【包含增删改查及事务等操作】
Jun 21 PHP
详谈PHP中public,private,protected,abstract等关键字的用法
Dec 31 PHP
PHP实现打包zip并下载功能
Jun 12 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
Jun 16 PHP
ThinkPHP like模糊查询,like多匹配查询,between查询,in查询,一般查询书写方法
Sep 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 数组排序 array_multisort与uasort的区别
2011/03/24 PHP
php在文件指定行中写入代码的方法
2012/05/23 PHP
PHP延迟静态绑定示例分享
2014/06/22 PHP
PHP手机号中间四位用星号*代替显示的实例
2017/06/02 PHP
PHP中“=>
2019/03/01 PHP
jquery刷新页面的实现代码(局部及全页面刷新)
2011/07/11 Javascript
Jquery中显示隐藏的实现代码分析
2011/07/26 Javascript
十个迅速提升JQuery性能让你的JQuery跑得更快
2012/12/10 Javascript
js函数排序的实例代码
2013/07/01 Javascript
javascript操作excel生成报表示例
2014/05/08 Javascript
js+css实现回到顶部按钮(back to top)
2016/03/02 Javascript
JavaScript 中 apply 、call 的详解
2017/03/21 Javascript
promise处理多个相互依赖的异步请求(实例讲解)
2017/08/03 Javascript
mongoose更新对象的两种方法示例比较
2017/12/19 Javascript
在NPM发布自己造的轮子的方法步骤
2019/03/09 Javascript
浅谈对于react-thunk中间件的简单理解
2019/05/01 Javascript
Vue项目实现简单的权限控制管理功能
2019/07/17 Javascript
Vue使用vue-recoure + http-proxy-middleware + vuex配合promise实现基本的跨域请求封装
2019/10/21 Javascript
9种方法优化jQuery代码详解
2020/02/04 jQuery
jQuery 选择器用法实例分析【prev + next】
2020/05/22 jQuery
vue实现图片上传功能
2020/05/28 Javascript
Vue 使用typescript如何优雅的调用swagger API
2020/09/01 Javascript
Python3利用print输出带颜色的彩色字体示例代码
2019/04/08 Python
Python3.5基础之变量、数据结构、条件和循环语句、break与continue语句实例详解
2019/04/26 Python
Pandas之Fillna填充缺失数据的方法
2019/06/25 Python
基于python代码批量处理图片resize
2020/06/04 Python
CSS实现聊天气泡效果
2020/04/26 HTML / CSS
伦敦著名的运动鞋综合商店:Footpatrol
2019/03/25 全球购物
银行实习鉴定
2013/12/13 职场文书
医药代表个人求职信范本
2013/12/19 职场文书
本科生就业推荐信
2014/05/19 职场文书
信息管理与信息系统专业求职信
2014/06/21 职场文书
银行会计主管岗位职责
2014/10/01 职场文书
2015商场元旦促销活动策划方案
2014/12/09 职场文书
2016教师给学生的毕业寄语
2015/12/04 职场文书
Pytorch GPU内存占用很高,但是利用率很低如何解决
2021/06/01 Python