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+MYSQL的文章管理系统(二)
Oct 09 PHP
php xml-rpc远程调用
Dec 19 PHP
php HtmlReplace输入过滤安全函数
Jul 03 PHP
使用php统计字符串中中英文字符的个数
Jun 23 PHP
php+mysqli批量查询多张表数据的方法
Jan 29 PHP
Zend Framework教程之Zend_Controller_Plugin插件用法详解
Mar 07 PHP
php使用Header函数,PHP_AUTH_PW和PHP_AUTH_USER做用户验证
May 04 PHP
MAC下通过改apache配置文件切换php多版本的方法
Apr 26 PHP
利用php-cli和任务计划实现刷新token功能的方法
May 03 PHP
PHP实现单例模式建立数据库连接的方法分析
Feb 11 PHP
php多进程中的阻塞与非阻塞操作实例分析
Mar 04 PHP
php框架知识点的整理和补充
Mar 01 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/08/09 PHP
PHP学习之数组值的操作
2011/04/17 PHP
PHP5 的对象赋值机制介绍
2011/08/02 PHP
CI框架中cookie的操作方法分析
2014/12/12 PHP
PHPTree――php快速生成无限级分类
2018/03/30 PHP
Laravel重定向,a链接跳转,控制器跳转示例
2019/10/22 PHP
幻灯片带网页设计中的20个奇妙应用示例小结
2012/05/27 Javascript
基于jQuery实现模拟页面加载进度条
2013/04/01 Javascript
javascript正则表达式参数/g与/i及/gi的使用指南
2014/08/27 Javascript
JSON字符串和对象之间的转换详解
2015/05/26 Javascript
Bootstrap被封装的弹层
2016/07/20 Javascript
Windows系统下安装Node.js的步骤图文详解
2016/11/15 Javascript
简单实现js倒计时功能
2017/02/13 Javascript
基于Bootstrap table组件实现多层表头的实例代码
2017/09/07 Javascript
JS实现的合并多个数组去重算法示例
2018/04/11 Javascript
react native 获取地理位置的方法示例
2018/08/28 Javascript
详解Nodejs get获取远程服务器接口数据
2019/03/26 NodeJs
Vue $mount实战之实现消息弹窗组件
2019/04/22 Javascript
vue中js判断长时间不操作界面自动退出登录(推荐)
2020/01/22 Javascript
Python 文件处理注意事项总结
2017/04/10 Python
Python3利用SMTP协议发送E-mail电子邮件的方法
2017/09/30 Python
python3结合openpyxl库实现excel操作的实例代码
2018/09/11 Python
Python 实现子类获取父类的类成员方法
2019/01/11 Python
关于Python作用域自学总结
2019/06/10 Python
python2 中 unicode 和 str 之间的转换及与python3 str 的区别
2019/07/25 Python
Python人工智能之路 之PyAudio 实现录音 自动化交互实现问答
2019/08/13 Python
Python和Sublime整合过程图示
2019/12/25 Python
用Python制作mini翻译器的实现示例
2020/08/17 Python
HTML5中使用postMessage实现Ajax跨域请求的方法
2016/04/19 HTML / CSS
售后服务科岗位职责范文
2013/11/13 职场文书
新闻报道策划方案
2014/06/11 职场文书
主题党日活动总结
2014/07/08 职场文书
警察群众路线对照检查材料思想汇报
2014/10/01 职场文书
科学育儿宣传标语
2014/10/08 职场文书
学术会议通知
2015/04/15 职场文书
CSS 文字装饰 text-decoration & text-emphasis 详解
2021/04/06 HTML / CSS