什么是 cURL 命令?
什么是 cURL 命令?
了解 HTTP 请求以及如何与 API 交互至关重要,尤其是在自动化请求和调试方面。在这种情况下,当我们需要执行快速 HTML 请求时,cURL 就派上用场了。
客户端 URL (cURL) 可让您通过命令行界面 (CLI) 在设备和服务器之间交换数据。只需指定服务器 URL 和要发送的数据,cURL 即可启用各种请求表单,就像 Postman 和 Insomnia 等 API 工具一样,但可直接从您的终端进行。
在本文中,我将介绍 cURL 命令,探讨其使用方式和原因,并展示一些常见的 cURL 命令示例和用例。
什么是 cURL 命令?
客户端 URL(cURL,发音为“curl”)是一种命令行工具,可通过终端在设备和服务器之间进行数据交换。使用此命令行界面 (CLI),用户可以指定服务器 URL(他们想要发送请求的位置)以及他们想要发送到该服务器 URL 的数据。
Postman 和 Insomnia 等API 工具提供了交互式用户界面 (UI),允许您向 URL 发出不同的请求以接收和处理请求。cURL 命令执行相同的操作,只是在您的终端中。cURL 适用于 Linux、Mac 和 Windows。
cURL 命令使用 libcURL 客户端 URL传输库。此库支持多种不同的传输协议,包括 HTTPS、SMTP 和 FTP。它还允许您在发出请求时包含 Cookie、设置代理和添加身份验证凭据。
cURL 的用例包括测试 API、从源下载数据、测试网站以及从终端跟踪重定向。
cURL 命令的语法
curl 命令的基本语法可以包括选项和 URL:
cURL [选项] [URL]
- 选项:当我想自定义请求的行为时,我会利用选项。
- URL:指定的 URL 或位置告诉 cURL 命令我想要从哪里访问数据或发送数据。
没有选项的 Curl 命令
我在 Git Hub 上的 JSON 文件中存储了我最喜欢的书籍列表。为了在终端中检索书籍列表,我使用了不带任何选项的 cURL 命令。您可以尝试以下命令,您的输出将与下面的示例完全相同。终端cURL https://raw.githubusercontent.com/devans24/books/main/books_data.json
带选项的 Curl 命令
使用不带选项的 cURL 命令会显示文件的原始内容。但是,当我想将文件下载到我的服务器时,我会运行带有 -O 选项的 cURL 命令。终端cURL -O https://raw.githubusercontent.com/devans24/books/main/books_data.json
运行此命令后,我看到确认文件已下载的输出。
我总是运行 ls 命令来仔细检查该文件是否列在我的目录中。
在下一节中,我将更详细地解释如何使用 cURL 命令。
如何在 Linux 中使用 cURL 命令
您知道 cURL 命令是什么以及它的语法,但它是如何工作的呢?
cURL 预装在 Windows 和 macOS 上 – 否则,您可以从cURL 网站下载该软件包。
cURL 命令接收要传输数据或从中接收数据的 URL,以及用于不同目的的其他选项。
在本节中,我将使用 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 协议可用于在终端中搜索、分发和检索来自 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 等等。