cURL无处不在。它几乎隐藏在所有设备中,例如汽车,蓝光播放器等。它通过互联网协议传输任意类型数据。
在本文中,我们将揭开cURL神秘命令行工具的面纱,解释它是如何成为一种通用代码的,并举例说明其用法。
cURL是什么意思?
cURL(客户端URL)是一个开放源代码的命令行工具,也是一个跨平台的库(libcurl),用于在服务器之间传输数据,并分发给几乎所有新的操作系统。cURL编程用于需要通过Internet协议发送或接收数据的几乎任何地方。cURL支持几乎所有的互联网协议(DICT,FILE,FTP,FTPS,GOPHER,HTTP,HTTPS,IMAP,IMAPS,LDAP,LDAPS,MQTT,POP3,POP3S,RTMP,RTMPS,RTSP,SCP,SFTP,SMB,SMBS,SMTP ,SMTPS,TELNET和TFTP)。
cURL的历史
回到90年代的黑暗时代,那时每个人仍然使用命令行工具,Daniel Sterberg希望开发一个简单的IRC脚本,该脚本可以为聊天室成员转换货币。在1997年,建立互联网协议数据传递基础的方法不多,因此Httpget(基于HTTP的传输的几百行代码)成为cURL的起源。为了纪念其基础,它率先被称为HTTPGET 1.0。
几个月后,开发出了FTP的支持,就不得不删除该名称了。现在,它被称为urlget 2.0。经过几次更新后,在1998年3月30日,名称再次更改为现在众所周知的cURL 3.0。
cURL之前其实还有相似的 wget。我们不会过多介绍细节,但是wget和cURL之间的主要区别在于它们各自的下载功能,例如前者可以从中断的传输中恢复并继续下载。
cURL的作用是什么?
cURL旨在通过互联网协议传输数据。其他所有内容均不在其范围内。它甚至不处理传输的数据,仅执行传输流程。
cURL可用于调试。例如使用“ curl -v https://oxylabs.io ”可以显示一个连接请求的详细输出,包括用户代理,握手数据,端口等详细信息。
可列出和解释的cURL命令选项太多了。幸运的是,可以使用“ curl –help”这个选项,它列出了所有curl命令行的用法,并附有简短的解释性注释。尽管这些命令行用法里没有有关如何使用cURL的相关背景知识介绍,用户也能通过列表知道一些命令行的用法。
如何使用cURL?
几乎所有具有相对较新操作系统的人都可以使用cURL,因为cURL在Windows,MacOS和大多数Linux发行版中作为默认设置提供。对于较早的系统,例如10之前的任何Windows操作系统,可能需要下载并安装cURL 。
要使用cURL,只需打开终端并输入“curl”。正常情况下,“curl -help”会自动跳出,用户可以选择是否执行“ curl –help”命令行。如前所述,“帮助”将列出所有命令可能性。
可以通过添加列出的命令行并键入URL来组合cURL命令。参数可以是短的(例如-o,-L等)或长的(例如-verbose)。这些参数通过使用单破折号或双破折号来区分。
如何使用cURL
发送请求
cURL是通过Internet协议进行数据传输且功能强大的工具。想要详细说明cURL能干什么并列出所有选项将是一项无法完成的任务。cURL用法多种多样,下面给大家展示一些常见的通用案例。
由于cURL最初是为HTTP开发的,因此我们可以发送所有常规请求(POST,GET,PUT等)。为了将POST请求发送到URL,使用-d(或–data)命令行。大多数网站都会拒绝未经授权的用户的此类请求,因此我们将使用虚假的API进行测试。
curl -d “name=something&value=somethingelse”
https://jsonplaceholder.typicode.com/posts/
发送这样的请求应该返回:
{
“name”: “something”,
“value”: “somethingelse”,
“id”: 101
}
这里简单说下整个过程:
- curl开始我们的命令
- -d是POST请求的“数据”参数
- 引号(“”)开始我们的内容声明。请注意,某些操作系统将仅接受单引号,而其他操作系统将接受双引号。
- 最后是目的地。URL语法应始终准确,因为cURL不会自动跟随重定向。
我们也可以以JSON格式发送POST请求,但必须提供其他选项才能告诉服务器我们正在发送JSON。cURL不会代表用户做任何解释,并且会发送默认的application / text的Content-Type标头,因此我们必须自己添加标头Content-Type:application / json。
curl -H “Content-Type: application/json” –data
“{\”data\”:\”some data\”}”
https://jsonplaceholder.typicode.com/posts/
跟随重定向
cURL不会自动跟随重定向。如果我们期望这样做,我们应该添加一个额外的命令行。让我们看一个例子:
curl https://baidu.com
我们的浏览器自行处理重定向,因此我们甚至可能不会注意到此类请求的问题。但是,如果我们发送cURL来完成工作,则会收到通知,说明文档在尝试连接时已被移动。以下让我们看看在win10命令提示符里直接执行以上指令所返回的结果:
我们可以看到显示的结果是302 Found,一些有经验的用户应该知道302 Found 是HTTP协议中的一个状态码(Status Code),可以简单的理解为该资源原本确实存在,但已经被临时改变了位置;或者换个说法,就是该资源临时解析到某个URL下。通常会发送Header来暂时重定向到新位置。也就是说此处没有像常规浏览器那样自动跟随重定向。因此,为了使cURL跟随重定向,我们必须添加一个特殊的参数“ -L”(参数区分大小写)。
curl -L https://www.google.com
执行的结果如下:
现在,我们应该已经从Baidu收到了常规答案,因为cURL遵循从https://baidu.com到https://www.baidu.com 的重定向。
通过代理连接
cURL可用于通过代理连接到任何目的地。与其他任何cURL语句一样,URL,语法和其他所有内容都保持不变,除了添加的参数及其属性。
curl –proxy proxyaddress:port
https://jsonplaceholder.typicode.com/
在“ -proxy”之后输入代理和端口将通过输入的地址路径连接。代理通常需要提交详细的登录凭证来进行身份验证,用户可以通过-U参数的命令行来完成提交。
curl –proxy proxy:port -U “username:password”
https://jsonplaceholder.typicode.com/
某些网站在接受任何连接请求之前将需要进行身份验证。服务器身份验证使用类似的参数:“-u”。
curl -u username:password
https://jsonplaceholder.typicode.com/
结论
cURL是用于Internet协议传输的非常强大的工具。掌握其用法绝对不是一件容易的事情,然而它却能成为任何开发人员工具包中不可替代的工具。坦率地说,想在cURL用例上进行扩展不难,但是想要挖掘所有可能性,几乎是不可能实现的,因为涉及到的可能性太多。