欢迎各位兄弟 发布技术文章
这里的技术是共享的
以下是一些使用curl命令的示例:
curl https://example.com # 不跟选项,就会把结果输出到屏幕上
此命令会向 https://example.com 发起一个GET请求,并将响应主体打印到终端。
下载文件:
arduino -O(大写)像“输出到原始文件”(Original),复制代码curl -O <URL>
使用-O
选项,curl将下载URL指向的文件,并将其保存在当前目录中。如果要将文件保存在特定位置,可以使用-o
选项,后跟要保存的文件名:
arduino (小写 o) --output [文件名]复制代码curl -o <filename> <URL>
发送HTTP请求: -X 在计算机领域中常代表 eXchange(交换)或 eXtended(扩展),与「自定义 HTTP 请求方法」的灵活性契合
arduino复制代码curl -X <method> <URL>
使用-X ( -X/--request )
选项,您可以指定HTTP方法(GET、POST、PUT等)。例如,要发送GET请求,可以执行以下命令:
arduino复制代码curl -X GET <URL>
发送POST请求:
swift -d 就是 data 的意思 复制代码curl -X POST -d '<data>' <URL>
使用-X POST
选项和-d
选项,您可以发送POST请求并指定要发送的数据。将<data>
替换为实际要发送的数据。例如,要发送JSON数据,可以执行以下命令:
swift复制代码curl -X POST -d '{"name":"John","age":30}' <URL>
设置请求头: -H header 头部
swift 复制代码curl -H '<header>' <URL>
使用-H
选项,您可以设置请求头。将<header>
替换为实际的请求头。例如,要设置Content-Type请求头,可以执行以下命令:
swift复制代码curl -H 'Content-Type: application/json' <URL>
这些只是curl命令的一些示例。您可以使用curl执行更多高级操作,如跟踪重定向、限制下载速度、处理cookie等。要了解更多curl选项和用法,请参考curl命令的文档。
curl -I 详解
在 Linux 的 curl 命令中,-I(大写字母 i)(I 像 HEAD 响应中的 Info) 是 --head 的简写,它用于 发送 HTTP HEAD 请求,仅获取目标 URL 的响应头信息,而不会返回实际的响应体(正文内容)。
curl -I https://example.com
输出示例:
HTTP/2 200
accept-ranges: bytes
age: 554374
cache-control: max-age=604800
content-type: text/html; charset=UTF-8
date: Mon, 15 Jan 2024 12:00:00 GMT
etag: "3147526947"
expires: Mon, 22 Jan 2024 12:00:00 GMT
last-modified: Thu, 17 Oct 2019 07:18:26 GMT
server: ECS (nyb/1D2C)
x-cache: HIT
在Linux中,您可以使用curl命令来发出HTTP请求。以下是curl的基本用法:
发起GET请求:
curl https://example.com
此命令会向https://example.com
发起一个GET请求,并将响应主体打印到终端。
发起POST请求:
curl -X POST -d "key1=value1&key2=value2" https://example.com
此命令会向https://example.com
发起一个带有表单数据的POST请求。
发起带有用户凭据的请求:
curl -u username:password https://example.com
此命令会使用提供的用户名和密码向https://example.com
进行身份验证。
下载文件:
curl -O https://example.com/file.txt
此命令会下载https://example.com/file.txt
并保存到当前目录。
发送自定义请求头:
curl -H "Content-Type: application/json" https://example.com
此命令会添加一个自定义请求头Content-Type: application/json
并向https://example.com
发起请求。
这只是curl的一些基本用法示例。更多高级用法和选项,请查阅curl的文档或运行curl --help
命令。
-X 为什么不是 --request 的首字母
这是一个很好的问题!-X
并没有使用 --request
的首字母 R
,而是使用了字母 X
,这背后有几个原因:
字母资源冲突(核心原因)curl
的短选项(单字母)资源非常紧张(只有 26 个字母)。在早期设计时:
-R
已被占用 → --remote
(与 FTP/SFTP 相关)
-r
也被占用 → --range
(指定下载字节范围)
X
是少数可用的高阶字母(使用频率较低,适合留给新功能)
语义联想(辅助原因)
X
在计算机领域中常代表 eXchange(交换)或 eXtended(扩展),与「自定义 HTTP 请求方法」的灵活性契合
类似用法:-X
在 gcc
中用于指定语言标准(如 -std=c11
),也代表「扩展/特殊模式」
历史兼容性curl
的选项设计继承了早期网络工具(如 wget
、ftp
)的习惯,单字母选项优先使用易记且未占用的字符,而非强求首字母匹配。
命令 | 短选项 | 长选项 | 逻辑 |
---|---|---|---|
curl | -I | --head | I 像 HEAD 响应中的 Info |
tar | -z | --gzip | z 象征压缩的 zip |
grep | -E | --extended-regexp | E 代表 Extended |
ssh | -p | --port | p 是 port 首字母可用 |
💡 设计哲学:短选项的优先级是「可用性 > 记忆性」
当首字母不可用时,会选择:
关联语义的替代字母(如
-I
代表 HEAD)完全无冲突的冷门字母(如
-X
)
-H
已存在 → 用于 --header
(添加 HTTP 头)
-M
已存在 → 用于 --manual
(显示手册页)
-Q
已存在 → 用于 FTP 命令(--quote
)
-R
已存在 → 用于 --remote
(FTP/SFTP)
-X
的诞生本质是「字母资源分配」的妥协结果:
--request
的首字母 R
已被占用
开发者选择了可用且语义略有关联的 X
(暗示「特殊操作」)
这种设计虽不够直观,但在命令行工具中很常见
这种「短选项非首字母」的现象在 Unix/Linux 工具中普遍存在,是历史约定与功能扩展平衡的产物。
linux curl -I 详解 示例
curl -I
详解在 Linux 的 curl
命令中,-I
(大写字母 i)(I
像 HEAD 响应中的 Info) 是 --head
的简写,它用于 发送 HTTP HEAD 请求,仅获取目标 URL 的响应头信息,而不会返回实际的响应体(正文内容)。
只请求服务器返回 HTTP 头部信息,不下载实际数据。
常用于检查:
服务器是否正常响应(HTTP/2 200
)
Content-Type
(文件类型)
Content-Length
(文件大小)
Last-Modified
(最后修改时间)
Location
(重定向 URL)
缓存策略(Cache-Control
、ETag
)
跨域策略(CORS
相关头)
curl -I
基本用法bashcurl -I [URL]
bashcurl -I https://example.com
输出示例:
HTTP/2 200
accept-ranges: bytes
age: 554374
cache-control: max-age=604800
content-type: text/html; charset=UTF-8
date: Mon, 15 Jan 2024 12:00:00 GMT
etag: "3147526947"
expires: Mon, 22 Jan 2024 12:00:00 GMT
last-modified: Thu, 17 Oct 2019 07:18:26 GMT
server: ECS (nyb/1D2C)
x-cache: HIT
301/302
)bashcurl -I http://google.com
输出示例:
HTTP/1.1 301 Moved Permanently
Location: https://www.google.com/
...
这里可以看到 301
跳转,并给出新的 Location
。
bashcurl -I https://example.com/image.jpg
输出示例:
HTTP/2 200
content-type: image/jpeg
content-length: 123456
last-modified: Wed, 10 Jan 2024 08:00:00 GMT
可以获取文件类型(image/jpeg
)、大小(123456
字节)、最后修改时间。
-L
)如果服务器返回 301/302
,curl -I
默认不会跟随跳转。要查看最终地址的头信息,可以加 -L
(--location
):
bashcurl -IL http://google.com
这样会显示所有跳转链的头信息。
-v
)结合 -v
(--verbose
)可以查看完整的 HTTP 请求和响应:
bashcurl -Iv https://example.com
grep
过滤)例如,只查看 content-type
:
bashcurl -I https://example.com | grep -i content-type
输出:
content-type: text/html; charset=UTF-8
-I
只适用于 HTTP/HTTPS(不适用于 FTP 等其他协议)。
某些服务器可能会对 HEAD
请求返回不同的头部(如 CDN 缓存)。
如果目标 URL 是动态生成的(如 PHP 页面),HEAD
请求可能不会触发完整的处理逻辑。
-I
vs -i
-I
(大写 i):仅获取头部(HEAD 请求)。
-i
(小写 i):获取完整响应(包括头部 + 正文)。
示例:
bashcurl -i https://example.com
输出会包含 HTTP 头和 HTML 正文。
命令 | 用途 |
---|---|
curl -I [URL] | 只获取 HTTP 头,不下载内容 |
curl -IL [URL] | 跟踪重定向并获取最终头信息 |
curl -Iv [URL] | 显示详细请求过程 |
curl -i [URL] | 获取完整响应(头 + 正文) |
常用于调试 HTTP 请求、检查服务器状态、分析文件属性等场景。