什么是 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
运行此命令后,会看到文件成功下载的确认信息。
一般情况下,运行 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-urlencoded
或 application/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×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 命令在 Linux 上将返回图像的二进制数据。通过将原始图像数据保存到图像文件中(扩展名为 .png,与原始图像的扩展名匹配),可以将图像保存在设备上。
保存 URL 内容输出
与下载图片类似,可以将 URL(如网页)的内容保存到文件中。以下是保存 Google 主页的示例:
curl -o google.html https://www.google.com
这个命令将 Google 主页的源代码保存到名为 google.html
的文件中。
总结
cURL 是一个 CLI 工具,通过不同的协议请求和传输 URL 数据。它提供了在终端中对 URL 的灵活控制。
在终端上使用 cURL 既简单又强大。只需提供 URL 和所需的选项,即可从 URL 请求和下载数据,或者将数据传输到 URL 等操作。