菜鸟科技网

curl命令返回了什么?

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

curl命令返回了什么?-图1
(图片来源网络,侵删)
  1. 标准输出:这是命令执行成功时,默认打印到终端屏幕上的内容,通常是请求到的数据,比如网页的 HTML 代码、JSON 数据、图片的二进制数据等。
  2. 标准错误:当命令执行失败时,相关的错误信息会打印到这里,这也是在终端上显示的,但与标准输出是分开的。

下面我们通过几个常见的场景来具体分析。


最简单的成功请求(获取网页 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>

解读:

curl命令返回了什么?-图2
(图片来源网络,侵删)
  • 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>...:空行之后的就是实际的响应体内容。

只显示响应头(-IHEAD 选项)

当你只想检查一个 URL 是否存在、或者获取其元信息而不想下载整个内容时,这个选项非常有用。

curl命令返回了什么?-图3
(图片来源网络,侵删)
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)则是服务器对请求的“官方答复”。

分享:
扫描分享到社交APP
上一篇
下一篇