什么是 cURL 命令?它是做什么的?怎么用?
cURL是一种客户端命令行工具,可通过它实现终端与服务器之间数据交互,例如Get、Post、Put、Delete等。cURL 支持多种不同的协议(包括 HTTP 和 HTTPS),并且几乎可以在所有平台上运行,是测试从本地电脑 到大多数服务器或边缘设备的网络通信的最方便选择。
例如,在测试开放API时,cURL 可让您通过命令行界面 (CLI) 在设备和API开放平台之间交换数据。只需指定服务器 URL 和要发送的数据,cURL 即可启用各种请求表单,替代 Postman 和 Insomnia 等 API 工具,例如:
curl --request GET 'https://www.explinks.com'
curl -H "Content-Type: application/json" --data "{\"data\":\"some data\"}" https://open.explinks.com/echo/
什么是 cURL 命令?
cURL是一种命令行工具,使用此命令行界面 (CLI),用户可以指定服务器 URL(他们想要发送请求的位置)即可请求 Web 服务器。
cURL 命令使用 libcURL 客户端 URL传输库。此库支持多种不同的传输协议,包括 HTTPS、SMTP 和 FTP。它还允许您在发出请求时包含 Cookie、设置代理和添加身份验证凭据。
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具有如下优势:
- 它具有高度的可移植性。它与几乎所有操作系统和连接设备兼容。
- 它对于测试端点并检查它们是否正常工作很有用。
- 它可以是详细的,提供已发送/接收的详细信息,这有助于调试。
- 它具有良好的错误日志记录功能。
- 它可以受到速率限制。
cURL 的起源和发展历史
在上个世纪 90 年代,人人都在用命令行工具,Daniel Sterberg 想开发一款简单好用的 IRC 脚本来帮助聊天室网友兑换货币。在 1997 年,为互联网协议数据传输基础的选择并不多 ,因此,Httpget(基于 HTTP 传输的数百行代码)便成为 cURL 最初的选择。为了纪念这段基础代码,取名为 HTTPGET 1.0。
几个月后,因开发出了支持 FTP 的客户端而弃用之前的名字,更名为 url2.0。几度更新后,于 1998 年 3 月30 日,再次更名为如今大名鼎鼎的 cURL3.0。
cURL是做什么用的?
cURL 的作用就是通过互联网协议传输数据,可用于以下场景:
- cURL可用于获取网站源码,例如:curl www.explinks.com
- cURL可用于显示网站头信息,例如:curl -i www.explinks.com
- cURL可用于显示通信过程,查看报文原数据,例如:curl -v www.explinks.com
- cURL可用于测试网站,包括发送表单信息、文件上传、下载文件,指定Referer字段、User agent字段、cookie字段、增加头信息,例如:curl -X POST –data “data=xxx” www.explinks.com/search
- cURL可用于发送API请求
- cURL可用于通过代理连接来访问目标网站,例如:curl –proxy proxyaddress:port https://www.yahoo.com/
cURL 怎么用?
使用相对较新操作系统的用户,几乎人人都可能在使用 cURL,因为它是 Windows、MacOS 和大多数 Linux 系统的默认配置。如果是较老的操作系统,例如 Windows 10 以前的系统,可能需要下载cURL并安装 cURL。
要使用 cURL,只需打开终端输入 “curl” 即可,正常情况下,系统会调出 “curl –help”。
cURL 命令的语法
curl 命令的基本语法可以包括选项和 URL:
cURL [选项] [URL]
1、选项:当我想自定义请求的行为时,需要指定选项,以下是一些常见选项:
- -H 或 –header:设置请求头。例如,-H “Content-Type: application/json”会将Content-Type设置为application/json。
- -X 或 –request:设置请求方法。例如,-X PUT会将请求方法设置为PUT。
- -d 或 –data:发送POST请求的数据字段。
- -u 或 –user:设置HTTP认证信息。例如,-u username:password会使用基本认证方式发送HTTP请求。
- -v 或 –verbose:输出详细的调试信息。
- –data-binary:发送二进制数据。
- -i 或 –head:输出HTTP响应头。
- -L 或 –location:跟随重定向。
- -o 或 –output:将响应输出到文件,而不是标准输出。
- -s 或 –silent:静默模式,不输出任何东西。
2、URL:指定的 URL 或位置告诉 cURL 命令我想要从哪里访问数据或发送数据。
cURL用于发送 API 请求
我们可以使用 curl 发送 API 请求。每个请求通常由四个主要部分组成:
- 端点,即我们向其发送请求的地址(URL)。
- HTTP 方法。最常用的方法是 GET、POST、PUT 和 DELETE。
- GET用于从服务器检索资源。这可能是文件、信息或图像。
- POST用于向服务器发送信息。
- PUT可用于创建或更新资源。这可用于创建或更新数据库中的记录或更新文件的内容。
- DELETE用于删除资源,例如数据库条目。这些方法的操作是推荐的操作,但具体发生什么则由 API 规范和实现来定义。
- 标头,包含有关请求的元数据,例如内容类型、用户代理等。
- Body,即消息正文,包含我们要发送的数据(如果有)。通常,正文与 POST 和 PUT 方法一起使用。
请求代码:
curl -d @request.json -H "Content-Type: application/json" --data "{\"data\":\"some data\"}" http://localhost:8082/spring-rest/foos/new
-- 端点:http://localhost:8082/spring-rest/foos/new
-- HTTP方法:选项-d,表示用post方法
-- 标头:Content-Type: application/json
-- Body:{\"data\":\"some data\"}
返回值:
{
"timestamp" : "15-07-2018 05:57",
"status" : 415,
"error" : "Unsupported Media Type",
"exception" : "org.springframework.web.HttpMediaTypeNotSupportedException",
"message" : "Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported",
"path" : "/spring-rest/foos/new"
}
cURL常见使用场景及指令格式指南
在本节中,将使用 JSONPlaceholder Fake API来解释使用 cURL 的不同方法。此模拟 API 包含用于发出请求的不同示例路径。
从源请求数据
使用cURL 的GET方法,您可以快速从源或 API 请求数据。以下是发出GET请求的简单 cURL 命令:终端cURL https://jsonplaceholder.typicode.com/todos/1
如果不传递任何标志或选项,cURL 命令默认向指定 URL 发出GET请求。该命令返回从 API 发送的响应主体,在您的终端中显示如下:
{ “userId”: 1, “id”: 1, “title”: “delectus aut autem”, “completed”: false }
这与 Postman 等平台的结果类似,如下所示:
此外,您还可以包含选项和值,以便在 cURL 命令中使用不同的请求方法。例如,您可以在请求方法中使用-X (连字符和大写 X)选项。 -X选项是**–request**的别名。
写入命令如下:终端cURL -X [METHOD] [URL]
上面第一个 cURL 命令中的默认GET方法与以下内容相同:终端cURL -X GET https://jsonplaceholder.typicode.com/todos/1
发送数据到源
使用POST方法和 cURL 命令,您可以通过 API 将数据传输到服务器。API 处理数据,然后执行诸如将其保存到数据库等步骤,并返回指示请求状态的响应。
要向URL发出POST请求,请使用**-X选项并将POST方法作为值传递。但是如何在请求中添加数据?您可以使用另一个选项-d (连字符和小写的 d),这是–data**的别名。
在使用请求发送数据时,您可以使用两种流行的数据格式:application/x-www-form-urlencoded或application/json。接下来我们将介绍这两种方法。
应用程序/x-www-form-URLencoded
如果您未指定所需的格式,cURL默认使用application/x-www-form-urlencoded 。以下是使用此格式和 JSON fake API 的示例:终端cURL -X POST -d “name=cURL&type=article” https://jsonplaceholder.typicode.com/posts
此命令向https://jsonplaceholder.typicode.com/posts发出**POST请求,并传递 URL 编码数据“name=cURL&type=article”,**这是一个带有 cURL 值的名称键和一个带有文章值的类型键。
对于向 JSON Fake API 发出的POST请求,响应正文是与 ID 属性一起发送的数据对象。
输入命令后,API 的响应主体如下:
{ “名称”:“cURL”, “类型”:“文章”, “ID”:101 }
应用程序/JSON
使用 cURL,您还可以发送字符串化的 JSON 对象,如下所示:终端cURL -X POST -d ‘{“name”: “cURL”, “type”: “article”}’ https://jsonplaceholder.typicode.com/posts
如上所述,此请求中的数据以application/x-www-form-urlencoded格式发送。以下是 API 的结果:
{ “{“名称”: “cURL”, “类型”: “文章”}”: “”, “id”: 101 }
API 认为请求数据是 URL 编码的数据格式,因此它不会按照您的预期进行解释。您必须使用 -H (带大写 H 的连字符)选项(–header的别名)并传递Content-Type标头来指定这是 JSON 数据格式,如下所示:终端cURL -X POST -d ‘{“name”: “cURL”, “type”: “article”}’ -H “Content-Type: application/json” https://jsonplaceholder.typicode.com/posts
现在,您可以从 API 获得正确的响应主体:
{ “名称”:“cURL”, “类型”:“文章”, “ID”:101 }
您不必在终端中输入 JSON 字符串,而是可以指定 cURL 命令将用于数据选项的 JSON 文件。例如,假设您有一个名为data.json的文件,其中包含以下内容:
{ “名称”:“cURL”, “类型”:“文章” }
您可以运行 cURL 命令,假设它与文件位于同一项目中。此命令将获取 JSON 文件,对其进行字符串化,并将其与请求一起发送。您将获得与上述相同的结果:
{ “名称”:“cURL”, “类型”:“文章” }
删除服务器上的资源
您可以使用DELETE方法和 cURL 命令向 API 发送删除请求。您向此请求提供的 URL 和数据取决于 API 配置。
对于 JSON Fake API,您可以像这样指定资源路径和DELETE方法:终端cURL -X DELETE https://jsonplaceholder.typicode.com/posts/1
响应主体是一个空对象:
{}
最适合使用 API 更新现有资源
使用PUT方法和 cURL 命令,您可以向 API 发出“更新”请求以修改现有资源。对于 JSON Fake API,您可以指定资源路径和PUT方法并传递一些数据来更新资源。
您可以在此处使用所需的任何数据格式。此示例使用application/json:终端cURL -X PUT -d ‘{“name”: “json”, “type”: “post”}’ -H “Content-Type: application/json” https://jsonplaceholder.typicode.com/posts/1
您必须直接在标头中指定数据格式,以便 API 能够正确解释请求。
上述代码返回以下响应主体:
{ “名称”:“json”, “类型”:“post”, “id”:1 }
cURL 支持的常见协议和指令格式指南
默认情况下,cURL 使用 HTTP 协议。以下是 cURL 可以使用的一些其他协议和指令格式:
文件传输协议(FTP)
文件传输协议 ( FTP ) 将文件从服务器传输到客户端。将此协议与 cURL 结合使用可上传文件,如下所示:终端cURL -T [selected-file] “ftp://[target-destination]”
cURL 可以很好地替代标准FTP 客户端。
简单邮件传输协议(SMTP)
简单邮件传输协议 ( SMTP ) 用于将数据发送到 SMTP 服务器。此数据包括您要发送的文本、发件人和收件人。它看起来像这样:终端cURL smtp://[smtp-sever] –mail-from [sender] –mail-rcpt \ [receiver] –upload-file [mail-content-file]
字典网络协议(DICT)
字典网络协议 ( DICT ) 提供对字典的访问。将其与 cURL 一起使用,请运行以下命令:终端cURL “dict://dict.org/d:hello”
通过此命令,您将获得一个结果,显示所选的字典以及字典中“hello”的含义。
地鼠(GOPHER)
gopher 协议可用于在终端中搜索、分发和检索来自 Web 的文档。命令如下:终端cURL gopher:/serveraddress.com/resource/selector
超文本传输安全协议 (HTTPS)
HTTPS 是一种流行的协议,当与命令行中的 curl 一起使用时,它可以简化检索数据、API 交互、自动执行测试等任务以及一些网络操作。
使用此协议时,由于 HTTP 的安全加密连接,跨服务器传输的数据可以保持机密性和完整性。运行以下命令,但请确保指定要访问的网址:终端cURL https://www.example.com
互联网消息协议 (IMAP)
使用 IMAP 和 curl 命令可以实现邮件服务器交互、检索和阅读电子邮件以及邮箱管理。当我想从命令行搜索收件箱时,我会使用 IMAP 协议。curl -X’搜索文本“示例”’ imaps://imap.example.com/INBOX
使用上面的命令结构,我可以在收件箱中搜索包含特定单词的电子邮件。 将“example”替换为您要在电子邮件中查找的单词。将“ // imap.example.com/INBOX ”更改为您的 IMAP 服务器地址 + 您要搜索的邮箱。
轻量级目录访问协议 (LDAP)
将 cURL 与 LDAP 结合使用非常适合访问和管理存储目录服务信息的服务器。如果您想使用命令行完成诸如验证用户身份、更新目录或修改访问控制列表等任务,那么 LDAP 协议是值得使用的。终端curl -v ldap://example.com:389/dc=example,dc=com
此命令将在端口 389 上启动与 example.com 的 LDAP 连接,并从基本可分辨名称 (DN) dc=example,dc=com 开始执行搜索。请确保将 example.com 和基本 DN 替换为 LDAP 服务器的实际主机名和基本 DN。
邮局协议版本 3 (POP3)
POP3 可以与 cURL 命令一起使用,将电子邮件从邮件服务器检索到本地环境。如果您想使用脚本自动管理电子邮件,您一定要尝试一下这个命令协议组合。终端curl -u username:password -l pop3.example.com -R <message_id> > email.txt
虽然可以将 POP3 与 curl 一起使用,但它的安全性较低且功能有限。
实时流媒体协议(RTSP)
如果要从命令行与流媒体服务器交互,可以使用带有 cURL 的 RTMP 协议。命令结构如下所示:终端curl -i -X Play rtsp://example.com/stream
请记住,实际视频不会显示在终端中。相反,您将收到有关所请求媒体的基于文本的响应。
Curl 命令的输出
虽然 API 平台通常提供直观的界面来请求和将数据传输到 URL,但 cURL 可以成为终端的绝佳工具。以下是 cURL 命令和系统输出的一些日常用例。
从终端输出快速测试 API
正如我们所见,cURL 允许您从终端快速测试 API,而无需下载任何基于 API 的应用程序。让我们使用 Google 提供的地理位置 API。以下命令返回达拉斯牛仔体育场的时区:终端cURL “https://maps.googleapis.com/maps/api/timezone/json?location=32.7480,-97.0934×tamp=1331161200&key=YourKeyHere”
检查以下命令的输出:
下载图像和文件至设备输出
由于终端可以访问文件系统,因此您还可以轻松地从 URL 下载图像。例如,这是 Google 徽标URL。使用 cURL,您可以像这样下载图像:终端cURL https://www.google.com/images/branding/googlelogo/2x/googlelogo_light_color_272x92dp.png > google-logo.png
检查以下命令的输出:
使用 cURL 和图片的 URL 返回图片的二进制数据。通过将原始图片数据存储在图片文件中(扩展名为 .png,与原始图片的扩展名匹配),您可以将图片保存在设备上。
保存 URL 内容输出
与下载图片一样,您也可以将 URL(例如网页)的内容保存到文件中。以下是 Google 主页的示例:终端cURL -o google.html https://www.google.com
下面的输出将 Google 主页的源代码保存到名为 google.html 的文件中。
让 cURL 为您服务。
cURL 是一个 CLI 工具,可让您使用不同的协议通过 URL 请求和传输数据。它为您提供了灵活性和对终端上 URL 的控制。
在终端上使用 cURL 很简单,但对于每个用户来说可能并不直观。通过提供 URL 和所需的选项,您可以从 URL 请求和下载数据、将数据传输到 URL 等等。