cURL 是一个命令行工具,可以让你向服务器发送请求。它在大多数现代操作系统中都预装了,因此是许多网络项目的理想起点。
虽然有一些应用程序(例如 Postman)提供了更华丽的用户界面来实现相同的目标,但 cURL 更加可靠且层次更低,是自动化和许多其他使用场景的强大选择。
cURL 入门
cURL 在 Windows 10 及以后的版本和大多数 MacOS 操作系统中预装。某些 Linux 发行版可能会提供安装 cURL 的选项,但在很多情况下,你需要通过运行安装命令自行安装:
sudo apt-get install curl
对于较旧版本的 Windows,你可以从 cURL 的官方网站下载。安装完成后,你就可以开始发送请求了。
最后,通过打开终端并输入以下命令来验证是否正确安装:
curl --help
在 Windows 上,最好使用命令提示符(Command Prompt)而不是 Powershell,因为后者需要不同于本文其余部分所展示的格式。
发送 cURL POST 请求
所有 cURL 的使用都遵循相同的结构——调用 cURL 本身,设置请求选项、URL,然后是其他选项,例如头信息。
curl [request options] [URL] [other options]
有些选项,例如前面提到的“–help”,允许你在没有 URL 的情况下执行操作,但它们不会用于发送 cURL POST 请求。
发送 POST 请求有三个要求:
1. `-X` 和 `POST`
前者表示你打算发送请求,后者指定请求方法。
2. `-d` 和一些字符串
前者表示你打算发送一些数据,字符串值是内容。每个 cURL POST 请求都必须发送一些数据。cURL POST 数据可以是任何字符串,但是,API 通常有其格式要求,所以你需要阅读文档。
3. URL
通常是你发送 POST 请求的 API。
为了测试,我们将使用示例 ReqBin API URL。要发送最基本的 POST cURL 请求,只需输入:
curl -X POST https://reqbin.com/echo/post/json -d "YOUR_STRING"
许多 API 要求你以 JSON 格式发送数据,你可以通过如下格式化数据值来实现:
curl -X POST https://reqbin.com/echo/post/json -d '{"KEY":"VALUE", "KEY":"VALUE"}'
调整 cURL POST 请求的高级设置
一些 API 会提供(或要求)更多选项,以充分利用其功能。一个常见的 POST 请求方法需求是添加头信息。
你可以通过添加“-H”并提供头信息来实现:
curl -X POST https://reqbin.com/echo/post/json -d "YOUR_STRING" -H "Content-Type: application/json"
你还可以提供诸如用户代理(例如“User Agent: Chrome”)和接受的字符集(例如“Accept-Charset: utf-8”)等信息。每种类型的头信息都需要使用“-H”选项:
curl -X POST https://reqbin.com/echo/post/json -d '{"KEY":"VALUE", "KEY":"VALUE"}' -H "Content-Type: application/json" -H "Accept-Charset: utf-8"
此外,许多 API 在你提交任何请求方法之前都会有某种形式的身份验证。用户名和密码是一个常见的选项,可以这样包含:
curl --user "USERNAME:PASSWORD" -X POST https://reqbin.com/echo/post/json -d '{"KEY":"VALUE", "KEY":"VALUE"}' -H "Content-Type: application/json"
另一种常见的身份验证选项是发送带有 API 访问令牌的特定头信息。通常看起来像这样:
curl -X POST https://reqbin.com/echo/post/json -d '{"KEY":"VALUE", "KEY":"VALUE"}' -H "Content-Type: application/json" -H "API-Access-Token: YOUR_TOKEN"
最后,你可以使用 cURL 从文件中 POST 数据。你可以通过添加“-d”或“-F”来实现。通常使用“-F”选项:
curl -F "data=@path/to/local/file" https://reqbin.com/echo/post/json
错误处理
每当出现问题时,cURL 会自动生成某种形式的响应。你可以在终端中查看这些响应,并在 cURL POST 响应体中查找错误信息。
例如,如果你向 Google 的域发送一个没有任何数据的 cURL POST 请求,你会收到:
<title>Error 411 (Length Required)!!1</title> [...] <p>POST requests require a <code>Content-length</code> header. <ins>That's all we know.</ins>
类似地,带有一些数据的 cURL POST 请求会给你一个不同的错误,表明你不被允许这样做:
<title>Error 405 (Method Not Allowed)!!1</title> [...] <p>The request method <code>--POST</code> is inappropriate for the URL <code>/</code>. <ins>That's all we know.</ins>
一些 API 可能会提供通用的 HTTP 错误,而另一些则会有自定义的响应,告诉你如何更改请求。
总 结
虽然我们概述了许多选项,但 cURL 的文档中还有更多内容。然而,在实际操作中,你主要会修改以下 cURL POST 示例:
curl --user "USERNAME:PASSWORD" -X POST https://reqbin.com/echo/post/json -d '{"KEY":"VALUE", "KEY":"VALUE"}' -H "Content-Type: application/json"
大多数 API 会要求你包含身份验证信息、负载详情(在“-d”下嵌套)、声明内容类型的头信息以及端点的 URL。你可以根据需要轻松调整上述 cURL POST 请求以符合 API 的要求。