所有WIKI > C字母 > 什么是 cURL 工具?

什么是 cURL 工具?

了解 HTTP 请求及其与 API 的交互至关重要,尤其是在自动化请求和调试过程中。在这种情况下,cURL 是一个非常有用的工具。

cURL(客户端 URL)允许在设备和服务器之间通过命令行界面 (CLI) 交换数据。只需指定服务器 URL 和要发送的数据,cURL 就可以像 Postman 和 Insomnia 等 API 工具一样启用各种请求类型,但可以直接从终端进行操作。

本文将介绍 cURL 命令,探讨其使用方式及原因,并展示一些常见的 cURL 命令示例和应用场景。

什么是 cURL 命令?

客户端 URL(cURL,发音为“curl”)是一种命令行工具,可通过终端在设备和服务器之间进行数据交换。借助此命令行界面 (CLI),用户可以指定服务器 URL(目标请求位置)及要发送的数据。

与 Postman 和 Insomnia 等 API 工具提供的交互式用户界面 (UI) 不同,cURL 命令直接在终端中操作,执行相同的请求发出与处理功能。cURL 适用于 Linux、Mac 和 Windows 操作系统。

cURL 命令依赖于 libcURL 客户端 URL 传输库。该库支持多种传输协议,包括 HTTPS、SMTP 和 FTP,还允许在请求中包含 Cookie、设置代理以及添加身份验证凭据。

cURL 的应用场景广泛,包括测试 API、从源头下载数据、测试网站性能,以及从终端跟踪重定向。

cURL 命令的语法

cURL 命令的基本语法包括选项和 URL:

cURL [选项] [URL]

  • 选项:当需要自定义请求的行为时,可以利用选项。
  • URL:指定的 URL 或位置告诉 cURL 命令要从哪里访问数据或发送数据。

没有选项的 cURL 命令

GitHub 上的 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

运行此命令后,会看到文件成功下载的确认信息。

curl 命令 linux,书籍

一般情况下,运行 ls 命令来仔细检查文件是否列在目录中。

如何在 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-urlencodedapplication/json。接下来将介绍这两种方法。

application/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",其中 "name" 键的值为 "cURL""type" 键的值为 "article"

对于向 JSON Fake API 发出的 POST 请求,响应正文是一个包含 ID 属性的数据对象。

输入命令后,API 的响应主体如下:

{ "name": "cURL", "type": "article", "id": 101 }

application/json

使用 cURL,发送字符串化的 JSON 对象可以通过以下方式实现:

cURL -X POST -d '{"name": "cURL", "type": "article"}' https://jsonplaceholder.typicode.com/posts

此请求中的数据以 application/x-www-form-urlencoded 格式发送,因此 API 可能不会按预期解释数据。结果如下:

{ “{\”name\”: \”cURL\”, \”type\”: \”article\”}”: “”, “id”: 101 }

为了确保数据以 JSON 格式发送,必须使用 -H(带大写 H 的连字符)选项(--header 的别名)并传递 Content-Type 标头,如下所示:

cURL -X POST -d '{"name": "cURL", "type": "article"}' -H "Content-Type: application/json" https://jsonplaceholder.typicode.com/posts

现在,API 将返回正确的响应主体:

{ “name”: “cURL”, “type”: “article”, “id”: 101 }

另外,可以通过指定 JSON 文件来避免在终端中输入 JSON 字符串。例如,假设有一个名为 data.json 的文件,内容如下:

{ “name”: “cURL”, “type”: “article” }

可以运行以下 cURL 命令,从文件中读取 JSON 数据并发送请求:

cURL -X POST -d @data.json -H "Content-Type: application/json" https://jsonplaceholder.typicode.com/posts

这样,将获得与上述相同的结果:

{ “name”: “cURL”, “type”: “article”, “id”: 101 }

删除服务器上的资源

使用 DELETE 方法和 cURL 命令,可以向 API 发送删除请求。URL 和数据的具体内容取决于 API 的配置。

对于 JSON Fake API,执行删除请求的命令如下:

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 能够正确解释请求。

上述命令将返回以下响应主体:

{ “name”: “json”, “type”: “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-server] --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 协议访问资源,可以使用以下命令:

cURL gopher:/serveraddress.com/resource/selector

超文本传输安全协议 (HTTPS)

HTTPS 是一种流行的协议,在命令行中使用 cURL 可以简化数据检索、API 交互、自动执行测试等任务。由于 HTTP 的安全加密连接,HTTPS 确保了跨服务器传输的数据的机密性和完整性。要使用 HTTPS 协议访问网站,运行以下命令:

cURL https://www.example.com

互联网消息协议 (IMAP)

IMAP 协议与 cURL 配合使用可以实现邮件服务器交互、检索和阅读电子邮件以及邮箱管理。当需要从命令行搜索收件箱时,可以使用 IMAP 协议。以下是一个示例命令,用于在收件箱中搜索包含特定单词的电子邮件:

curl -X 'SEARCH TEXT "example"' imaps://imap.example.com/INBOX

"example" 替换为要搜索的单词,将 imap.example.com/INBOX 替换为 IMAP 服务器地址和要搜索的邮箱。

轻量级目录访问协议 (LDAP)

cURL 与 LDAP 的结合非常适合访问和管理存储目录服务信息的服务器。要使用 cURL 进行 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 通过 POP3 协议检索邮件,可以使用以下命令:

curl -u username:password -l pop3.example.com -R <message_id> > email.txt

虽然 cURL 支持 POP3,但此协议的安全性较低且功能有限。

实时流媒体协议(RTSP)

要从命令行与流媒体服务器交互,可以使用 cURL 的 RTSP 协议。以下是一个示例命令:

curl -i -X Play rtsp://example.com/stream

请注意,此命令不会在终端中显示实际视频,而是返回有关所请求媒体的基于文本的响应。

更多协议的使用方法可以参考 cURL 手册页。

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&timestamp=1331161200&key=YourKeyHere"

命令的输出:

curl 命令 linux,, 时间

下载图像和文件至设备输出

由于终端可以访问文件系统,因此可以轻松地从 URL 下载图像。例如,这是 Google 图片的 URL。使用 cURL,可以像这样下载图像:

curl https://www.google.com/images/branding/googlelogo/2x/googlelogo_light_color_272x92dp.png > google-logo.png

检查以下命令的输出:

cURL 命令在 Linux 上将返回图像的二进制数据。通过将原始图像数据保存到图像文件中(扩展名为 .png,与原始图像的扩展名匹配),可以将图像保存在设备上。

保存 URL 内容输出

与下载图片类似,可以将 URL(如网页)的内容保存到文件中。以下是保存 Google 主页的示例:

curl -o google.html https://www.google.com

这个命令将 Google 主页的源代码保存到名为 google.html 的文件中。

总结

cURL 是一个 CLI 工具,通过不同的协议请求和传输 URL 数据。它提供了在终端中对 URL 的灵活控制。

在终端上使用 cURL 既简单又强大。只需提供 URL 和所需的选项,即可从 URL 请求和下载数据,或者将数据传输到 URL 等操作。