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性能优化准备篇图解PEAR安装
Dec 05 PHP
PHP漏洞全解(详细介绍)
Nov 13 PHP
基于preg_match_all采集后数据处理的一点心得笔记(编码转换和正则匹配)
Jan 31 PHP
php采用curl访问域名返回405 method not allowed提示的解决方法
Jun 26 PHP
thinkphp区间查询、统计查询与SQL直接查询实例分析
Nov 24 PHP
php实现无限级分类
Dec 24 PHP
学习php设计模式 php实现原型模式(prototype)
Dec 07 PHP
学习php设计模式 php实现备忘录模式(Memento)
Dec 09 PHP
Thinkphp框架中D方法与M方法的区别
Dec 23 PHP
CentOS 上搭建 PHP7 开发测试环境
Feb 26 PHP
php封装db类连接sqlite3数据库的方法实例
Dec 19 PHP
PHP实现数组向任意位置插入,删除,替换数据操作示例
Apr 05 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
咖啡与牛奶
2021/03/03 冲泡冲煮
编写自己的php扩展函数
2006/10/09 PHP
php在文件指定行中写入代码的方法
2012/05/23 PHP
浅析php面向对象public private protected 访问修饰符
2013/06/30 PHP
详解WordPress中用于更新和获取用户选项数据的PHP函数
2016/03/08 PHP
PHP调用其他文件中的类
2018/04/02 PHP
通过PHP实现获取访问用户IP
2020/05/09 PHP
PHP类的自动加载与命名空间用法实例分析
2020/06/05 PHP
主页面中的两个iframe实现鼠标拖动改变其大小
2013/04/16 Javascript
js调用css属性写法
2013/09/21 Javascript
Jquery实现图片放大镜效果的思路及代码(自写)
2013/10/18 Javascript
JS实现图片放大镜效果的方法
2015/02/27 Javascript
JS实现鼠标框选效果完整实例
2016/06/20 Javascript
浅谈JS函数定义方式的区别
2016/10/30 Javascript
原生JavaScrpit中异步请求Ajax实现方法
2017/11/03 Javascript
JS插件clipboard.js实现一键复制粘贴功能
2020/12/04 Javascript
Vue.js更改调试地址端口号的实例
2018/09/19 Javascript
Javascript表单序列化原理及实现代码详解
2020/10/30 Javascript
Python 实现购物商城,含有用户入口和商家入口的示例
2017/09/15 Python
Python+OpenCV人脸检测原理及示例详解
2020/10/19 Python
Django实现分页功能
2018/07/02 Python
Python中按值来获取指定的键
2019/03/04 Python
python实现两个经纬度点之间的距离和方位角的方法
2019/07/05 Python
Django打印出在数据库中执行的语句问题
2019/07/25 Python
Python post请求实现代码实例
2020/02/28 Python
Python使用pyexecjs代码案例解析
2020/07/13 Python
纯css3实现的鼠标悬停动画按钮
2014/12/23 HTML / CSS
Bibloo罗马尼亚网站:女装、男装、童装及鞋子和配饰
2019/07/20 全球购物
法雷奥SQA(electric)面试问题
2016/01/23 面试题
和谐社区口号
2014/06/19 职场文书
工作目标责任书
2014/07/23 职场文书
金融保险专业求职信
2014/09/03 职场文书
新闻稿件写作技巧
2015/07/18 职场文书
python基础入门之字典和集合
2021/06/13 Python
JS数组方法some、every和find的使用详情
2021/10/05 Javascript
解决redis批量删除key值的问题
2022/03/23 Redis