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下利用shell后台运行PHP脚本,并获取该脚本的Process ID的代码
Sep 19 PHP
写出高质量的PHP程序
Feb 04 PHP
PHP Parse Error: syntax error, unexpected $end 错误的解决办法
Jun 05 PHP
php 启动时报错的简单解决方法
Jan 27 PHP
php检测iis环境是否支持htaccess的方法
Feb 18 PHP
php目录遍历函数opendir用法实例
Nov 20 PHP
php生成年月日下载列表的方法
Apr 24 PHP
php生成过去100年下拉列表的方法
Jul 20 PHP
php实现过滤字符串中的中文和数字实例
Jul 29 PHP
基础的WordPress插件制作教程
Nov 24 PHP
开启PHP的伪静态模式
Dec 31 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
使用sockets:从新闻组中获取文章(一)
2006/10/09 PHP
smarty模板数学运算示例
2016/12/11 PHP
PHP sdk文档处理常用代码示例解析
2020/12/09 PHP
Sample script that deletes a SQL Server database
2007/06/16 Javascript
javascript 函数参数限制说明
2010/11/19 Javascript
不用锚点也可以平滑滚动到页面的指定位置实现代码
2013/05/08 Javascript
js操纵跨frame的三级联动select下拉选项实例介绍
2013/05/19 Javascript
jquery通过a标签删除table中的一行的代码
2013/12/02 Javascript
JQuery动画animate的stop方法使用详解
2014/05/09 Javascript
JavaSript中变量的作用域闭包的深入理解
2014/05/12 Javascript
iframe跨域通信封装详解
2015/08/11 Javascript
jquery中cookie用法实例详解(获取,存储,删除等)
2016/01/04 Javascript
Vue登录注册并保持登录状态的方法
2018/08/17 Javascript
JQuery获取元素尺寸、位置及页面滚动事件应用示例
2019/05/14 jQuery
js+html实现周岁年龄计算器
2019/06/25 Javascript
微信小程序实现左侧滑栏过程解析
2019/08/26 Javascript
微信小程序纯文本实现@功能
2020/04/08 Javascript
Js on及addEventListener原理用法区别解析
2020/07/11 Javascript
基于javascript实现放大镜特效
2020/12/03 Javascript
用javascript实现倒计时效果
2021/02/09 Javascript
[01:24:34]2014 DOTA2华西杯精英邀请赛5 24 DK VS LGD
2014/05/25 DOTA
[01:14:34]DOTA2上海特级锦标赛C组资格赛#2 LGD VS Newbee第一局
2016/02/28 DOTA
不可错过的十本Python好书
2017/07/06 Python
python的mysqldb安装步骤详解
2017/08/14 Python
python3中函数参数的四种简单用法
2018/07/09 Python
对django xadmin自定义菜单的实例详解
2019/01/03 Python
Django工程的分层结构详解
2019/07/18 Python
关于PyTorch 自动求导机制详解
2019/08/18 Python
matplotlib绘制多个子图(subplot)的方法
2019/12/03 Python
Django Path转换器自定义及正则代码实例
2020/05/29 Python
保安岗位职责
2014/02/21 职场文书
医学专业毕业生求职信
2014/06/20 职场文书
学校师德师风整改措施
2014/10/27 职场文书
Django 如何实现文件上传下载
2021/04/08 Python
jupyter notebook保存文件默认路径更改方法汇总(亲测可以)
2021/06/09 Python
Python面向对象之成员相关知识总结
2021/06/24 Python