curl 命令的返回结果可以分为两大类:

- 标准输出:这是命令执行成功时,默认打印到终端屏幕上的内容,通常是请求到的数据,比如网页的 HTML 代码、JSON 数据、图片的二进制数据等。
- 标准错误:当命令执行失败时,相关的错误信息会打印到这里,这也是在终端上显示的,但与标准输出是分开的。
下面我们通过几个常见的场景来具体分析。
最简单的成功请求(获取网页 HTML)
这是最常见的用法,curl 会直接将 URL 的内容打印出来。
curl https://www.example.com
返回结果:
<!doctype html>
<html>
<head>Example Domain</title>
<meta charset="utf-8">
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<style type="text/css">
body {
background-color: #f0f0f2;
margin: 0;
padding: 0;
font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
}
...
</style>
</head>
<body>
<div>
<h1>Example Domain</h1>
<p>This domain is for use in illustrative examples in documents. You may use this
domain in literature without prior coordination or asking for permission.</p>
...
</div>
</body>
</html>
解读:

- :
https://www.example.com网站的完整 HTML 源代码。 - 状态:命令执行成功,服务器返回了 HTTP 200 OK 状态码,
curl默认不显示状态码,只显示响应体。
显示 HTTP 状态码和响应头(使用 -i 或 -I 选项)
很多时候,我们不仅想知道返回了什么数据,还想了解 HTTP 协议的细节,比如状态码、服务器类型、内容类型等。
显示响应头和响应体(-i 选项)
curl -i https://www.example.com
返回结果:
HTTP/2 200
server: nginx
date: Wed, 27 Sep 2025 10:30:00 GMT
content-type: text/html; charset=UTF-8
content-length: 1256
last-modified: Tue, 26 Sep 2025 07:35:00 GMT
etag: "6337a1e4-4e8"
accept-ranges: bytes
strict-transport-security: max-age=31536000; includeSubDomains
... (这里是响应头) ...
<!doctype html>
<html>
<head>Example Domain</title>
... (这里是响应体,和场景一一样) ...
</html>
解读:
- HTTP/2 200:这表示使用了 HTTP/2 协议,并且服务器成功返回了请求,状态码是 200 (OK)。
- server: nginx:响应头信息,表明服务器使用的是 Nginx 软件。
- content-type: text/html; charset=UTF-8:告诉浏览器,返回的是 HTML 文本,并使用 UTF-8 编码。
- ... (这里是响应头) ...:和响应体之间有一个空行隔开,这是 HTTP 协议的标准格式。
<!doctype html>...:空行之后的就是实际的响应体内容。
只显示响应头(-I 或 HEAD 选项)
当你只想检查一个 URL 是否存在、或者获取其元信息而不想下载整个内容时,这个选项非常有用。

curl -I https://www.example.com
返回结果:
HTTP/2 200 server: nginx date: Wed, 27 Sep 2025 10:30:00 GMT content-type: text/html; charset=UTF-8 content-length: 1256 ... (其他响应头) ...
解读:
- 这次只返回了 HTTP 响应头,没有响应体,这对于快速检查 API 是否可用或获取资源信息(如文件大小
content-length)非常高效。
命令执行失败(标准错误输出)
当请求出现问题时,curl 会将错误信息输出到标准错误。
域名不存在或 DNS 解析失败
curl http://a-non-existent-domain-12345.com
返回结果:
curl: (6) Could not resolve host: a-non-existent-domain-12345.com
解读:
curl: (6):错误码 6,表示 "Couldn't resolve host"(无法解析主机名)。- 原因:DNS 服务器找不到
a-non-existent-domain-12345.com这个域名对应的 IP 地址。
连接被拒绝(目标服务器没开或端口错误)
curl http://127.0.0.1:9999
假设本地 9999 端口没有服务在监听。
返回结果:
curl: (7) Failed to connect to 127.0.0.1 port 9999 after 0 ms: Connection refused
解读:
curl: (7):错误码 7,表示 "Failed to connect"(连接失败)。- 原因:
curl成功找到了 IP 地址0.0.1,但尝试连接9999端口时被拒绝了,这通常意味着该端口上没有服务在运行,或者有防火墙阻止了连接。
HTTP 错误状态码(如 404 Not Found)
curl -i https://www.example.com/non-existent-page
返回结果:
HTTP/2 404 server: nginx date: Wed, 27 Sep 2025 10:31:00 GMT content-type: text/html content-length: 150 ... (其他 404 相关的响应头) ... <!DOCTYPE html> <html> <head><title>404 Not Found</title></head> <body> <center><h1>404 Not Found</h1></center> <hr><center>nginx</center> </body> </html>
解读:
-
HTTP/2 404:这是一个成功的 HTTP 协议交互,但业务上失败了,服务器明确告诉客户端:“你请求的资源我找到了,但它不存在”。 -
curl的行为:默认情况下,curl不会将 4xx 或 5xx 的 HTTP 错误视为程序执行失败,它会继续输出服务器返回的 404 页面内容,并且以退出码 0 成功结束。 -
如何捕获 HTTP 错误:如果你想在发生 HTTP 错误时让
curl以非零退出码失败,可以使用--fail(-f) 选项。curl -f https://www.example.com/non-existent-page
这次不会返回任何内容到标准输出,只会返回标准错误:
curl: (22) The requested URL returned error: 404
并且此时
curl的退出码会是 22,而不是 0。
将返回结果保存到文件(使用 -o 选项)
curl -o example.html https://www.example.com
返回结果:
% Total % Received % Xferd Average Speed Time Time Time Current
Download: 100% 1256 --.-KB/s in 0s
2025-09-27 10:32:00 (45 MB/s) - ‘example.html’ saved [1256/1256]
解读:
- 进度条:
curl会显示一个下载进度条,包含已下载百分比、总字节数、平均速度和预计剩余时间。 ‘example.html’ saved [1256/1256]:这是curl的标准输出信息,告诉你文件已成功保存,以及文件的大小。- :
example.html文件中会包含网页的 HTML 代码,但不会在终端上显示。
| 返回类型 | 命令示例 | 内容解读 |
|---|---|---|
| 标准输出 (成功) | curl https://example.com |
,如 HTML, JSON, 图片数据等。 |
| 标准输出 (带头) | curl -i https://example.com |
HTTP 响应头 + 一个空行 + 响应体内容。 |
| 标准输出 (仅头) | curl -I https://example.com |
仅 HTTP 响应头。 |
| 标准错误 (失败) | curl http://bad-domain.com |
curl: (错误码) 错误描述,如 DNS 解析失败、连接被拒绝。 |
| 标准输出 (保存文件) | curl -o file.html https://example.com |
下载进度条和文件保存信息。 |
理解 curl 的返回结果对于调试网络请求、与 API 交互和自动化脚本开发至关重要。标准输出是成功的数据,标准错误是失败的原因,而 HTTP 状态码(如 200, 404, 500)则是服务器对请求的“官方答复”。
