curl 使用方法大全(curl常用命令)
yuyutoo 2025-06-09 07:04 4 浏览 0 评论
`curl` 是一个非常强大的命令行工具,用于与服务器进行数据传输,支持多种协议,最常用的是 HTTP/HTTPS。它被广泛用于 API 测试、自动化脚本、文件下载等场景。
下面是 `curl` 命令的详细用法和举例说明:
### 一、基本用法
1. **获取网页内容 (GET 请求)**
最基本的功能是获取一个 URL 的内容并将其打印到标准输出。
```bash
curl http://example.com
```
这会获取 `http://example.com` 的 HTML 内容。
2. **获取多个 URL 的内容**
```bash
curl http://example.com http://example.org
```
### 二、下载文件
1. **将输出保存到文件 (`-o` 或 `--output`)**
将远程文件的内容保存到本地指定的文件名。
```bash
curl -o homepage.html http://example.com
```
这会将 `http://example.com` 的内容保存到 `homepage.html` 文件中。
2. **使用 URL 中的文件名保存 (`-O` 或 `--remote-name`)**
自动使用 URL 中的文件名来保存文件。
```bash
curl -O http://example.com/path/to/file.zip
```
如果 URL 是 `
http://example.com/path/to/file.zip`,文件将被保存为 `file.zip`。
3. **断点续传 (`-C -` 或 `--continue-at -`)**
如果下载中断,可以使用此选项从上次中断的地方继续下载。
```bash
curl -C - -O http://example.com/largefile.iso
```
### 三、发送不同类型的 HTTP 请求
1. **指定请求方法 (`-X` 或 `--request`)**
* **GET (默认)**:
```bash
curl http://httpbin.org/get
# 或者显式指定
curl -X GET http://httpbin.org/get
```
* **POST**:
```bash
curl -X POST http://httpbin.org/post
```
* **PUT**:
```bash
curl -X PUT http://httpbin.org/put
```
* **DELETE**:
```bash
curl -X DELETE http://httpbin.org/delete
```
* **HEAD (只获取头部信息,不获取响应体)**:
```bash
curl -X HEAD http://example.com
# 或者使用 -I 快捷方式
curl -I http://example.com
```
### 四、发送数据 (通常用于 POST, PUT 请求)
1. **发送表单数据 (`-d` 或 `--data`)**
默认情况下,`Content-Type` 会被设置为 `
application/x-www-form-urlencoded`。
```bash
# 发送单个参数
curl -d "name=daniel&project=curl" http://httpbin.org/post
# 也可以从文件读取数据,文件内容作为数据发送
echo "name=daniel&project=curl" > data.txt
curl -d @data.txt http://httpbin.org/post
```
注意:`-d` 会对数据进行 URL 编码。
2. **发送原始数据 (`--data-raw`)**
与 `-d` 类似,但 `@` 符号不会被特殊处理(即不会尝试从文件读取),而是作为字面值。
```bash
curl --data-raw "name=daniel&project=curl&email=test@example.com" http://httpbin.org/post
```
3. **发送 URL 编码的数据 (`--data-urlencode`)**
这个选项确保每个参数都被正确地 URL 编码。
```bash
curl --data-urlencode "name=John Doe" --data-urlencode "email=john.doe@example.com" http://httpbin.org/post
# 也可以包含特殊字符,curl 会处理编码
curl --data-urlencode "comment=This is a test & it works!" http://httpbin.org/post
```
4. **发送 JSON 数据**
需要手动设置 `Content-Type` 头部,并使用 `-d` 或 `--data-raw`。
```bash
curl -X POST -H "Content-Type: application/json" -d '{"name":"John Doe", "age":30}' http://httpbin.org/post
# 从文件读取 JSON 数据
echo '{"name":"Jane Doe", "age":28}' > user.json
curl -X POST -H "Content-Type: application/json" -d @user.json http://httpbin.org/post
```
5. **发送多部分表单数据 (文件上传) (`-F` 或 `--form`)**
常用于文件上传。`Content-Type` 会被设置为 `multipart/form-data`。
```bash
# 上传文件 myfile.txt,表单字段名为 "file_field"
touch myfile.txt
curl -F "file_field=@myfile.txt" http://httpbin.org/post
# 上传文件并指定 MIME 类型
curl -F "image=@photo.jpg;type=image/jpeg" http://httpbin.org/post
# 同时发送普通表单字段和文件
curl -F "name=John Doe" -F "profile_pic=@profile.png" http://httpbin.org/post
# 直接将字符串内容作为文件上传
curl -F "data=<string_data.txt;type=text/plain" -d "This is the content of the file" http://httpbin.org/post
```
### 五、处理 HTTP 头部
1. **显示响应头部 (`-i` 或 `--include`)**
在输出中包含 HTTP 响应头部。
```bash
curl -i http://example.com
```
2. **仅显示响应头部 (`-I` 或 `--head`)**
等同于发送 HEAD 请求。
```bash
curl -I http://example.com
```
3. **发送自定义请求头部 (`-H` 或 `--header`)**
可以发送一个或多个自定义头部。
```bash
curl -H "X-Custom-Header: MyValue" http://httpbin.org/headers
curl -H "Accept-Language: en-US" -H "Authorization: Bearer mytoken" http://httpbin.org/headers
# 清除一个内部使用的头部 (例如,如果你想发送一个空的 Accept 头部)
curl -H "Accept:" http://httpbin.org/headers
# 覆盖 Host 头部 (用于测试虚拟主机等)
curl -H "Host: api.example.com" http://actual-server-ip/resource
```
### 六、用户认证
1. **基本认证 (`-u` 或 `--user`)**
```bash
curl -u username:password http://example.com/protected_resource
# 如果只提供用户名,curl 会提示输入密码
curl -u username http://example.com/protected_resource
```
2. **摘要认证 (`--digest`)**
如果服务器使用摘要认证,需要添加此选项。
```bash
curl --digest -u username:password http://example.com/digest_protected_resource
```
3. **Bearer Token 认证 (通过头部)**
```bash
curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" http://api.example.com/data
```
### 七、处理 Cookies
1. **发送 Cookies (`-b` 或 `--cookie`)**
```bash
# 直接在命令行指定 cookie
curl -b "sessionid=12345;user=john" http://example.com/profile
# 从文件读取 cookie
echo "sessionid=abcdef;theme=dark" > cookies.txt
curl -b cookies.txt http://example.com/profile
```
2. **保存服务器响应的 Cookies (`-c` 或 `--cookie-jar`)**
将服务器设置的 cookie 保存到文件中。
```bash
curl -c cookies_from_server.txt http://example.com/login
# 之后可以使用这个 cookie 文件
curl -b cookies_from_server.txt http://example.com/dashboard
```
### 八、处理重定向
1. **自动跟随重定向 (`-L` 或 `--location`)**
如果服务器返回 3xx 重定向状态码,`curl` 会自动请求新的 URL。
```bash
curl -L http://google.com # google.com 通常会重定向到 www.google.com
```
### 九、SSL/TLS 相关选项
1. **忽略 SSL 证书验证 (`-k` 或 `--insecure`)**
**警告**: 这会使连接不安全,仅用于测试或信任的自签名证书环境。
```bash
curl -k https://self-signed.example.com
```
2. **指定 CA 证书 (`--cacert`)**
用于验证服务器证书的 CA 证书文件。
```bash
curl --cacert /path/to/ca.crt https://secure.example.com
```
3. **指定客户端证书 (`--cert` 和 `--key`)**
用于双向 SSL/TLS 认证。
```bash
curl --cert /path/to/client.pem --key /path/to/client.key https://api.example.com/secure
# 如果证书和私钥在同一个文件
curl --cert /path/to/client_and_key.pem https://api.example.com/secure
```
### 十、代理设置
1. **通过 HTTP 代理 (`-x` 或 `--proxy`)**
```bash
curl -x http://proxyserver:port http://example.com
# 如果代理需要认证
curl -x http://user:pass@proxyserver:port http://example.com
```
2. **通过 SOCKS5 代理 (`--socks5`)**
```bash
curl --socks5 socks5server:port http://example.com
# SOCKS5 代理带认证
curl --socks5-hostname socks5server:port --proxy-user user:pass http://example.com
```
### 十一、详细输出与调试
1. **显示详细操作信息 (`-v` 或 `--verbose`)**
打印出整个通信过程的详细信息,包括请求和响应头部以及其他诊断信息。
```bash
curl -v http://example.com
```
2. **跟踪请求 (`--trace <file>`)**
将所有传入和传出数据的完整十六进制转储保存到指定文件。
```bash
curl --trace trace_output.txt http://example.com
```
3. **跟踪请求 (ASCII) (`--trace-ascii <file>`)**
与 `--trace` 类似,但输出为 ASCII 格式,更易读。
```bash
curl --trace-ascii trace_ascii_output.txt http://example.com
```
### 十二、限速与超时
1. **限制下载/上传速度 (`--limit-rate`)**
单位可以是 `k` (KB/s) 或 `m` (MB/s)。
```bash
curl --limit-rate 100k -O http://example.com/largefile.zip
```
2. **最大传输时间 (`-m` 或 `--max-time <seconds>`)**
允许操作花费的总时间(秒)。
```bash
curl -m 30 http://example.com # 如果 30 秒内未完成,则超时
```
3. **连接超时 (`--connect-timeout <seconds>`)**
允许建立连接所花费的最大时间(秒)。
```bash
curl --connect-timeout 10 http://example.com
```
### 十三、其他有用选项
1. **静默模式 (`-s` 或 `--silent`)**
不显示进度表或错误信息。通常用于脚本中,只关心输出内容。
```bash
content=$(curl -s http://example.com/api/data)
```
2. **显示错误 (`-S` 或 `--show-error`)**
与 `-s` 配合使用,当发生错误时,仍然显示错误信息。
```bash
content=$(curl -sS http://nonexistent.example.com/api/data)
# 如果出错,会打印错误到 stderr
```
3. **设置 User-Agent (`-A` 或 `--user-agent`)**
```bash
curl -A "MyCustomBrowser/1.0" http://httpbin.org/user-agent
```
4. **设置 Referer (`-e` 或 `--referer`)**
```bash
curl -e "http://mywebsite.com/previous-page" http://example.com/target-page
```
5. **自定义输出格式 (`-w` 或 `--write-out`)**
在传输完成后,根据指定的格式字符串输出信息。
```bash
curl -s -o /dev/null -w "Status: %{http_code}\nSize: %{size_download}\nTime: %{time_total}\n" http://example.com
# 输出示例:
# Status: 200
# Size: 1256
# Time: 0.234567
```
可用的变量有很多,例如 `%{http_code}`, `%{time_total}`, `%{size_download}`, `%{remote_ip}` 等。
### 十四、组合使用示例
1. **下载文件,显示进度,跟随重定向,并使用特定的 User-Agent**
```bash
curl -L -O -A "MyDownloader/2.0" --progress-bar http://example.com/somefile.tar.gz
```
(`--progress-bar` 显示一个简单的进度条而不是默认的详细进度信息)
2. **向 API 发送 JSON 数据,包含认证头部,并保存响应到文件**
```bash
curl -X POST \
-H "Authorization: Bearer mysecrettoken" \
-H "Content-Type: application/json" \
-d '{"key":"value", "another_key":123}' \
-o api_response.json \
http://api.example.com/resource
```
3. **测试网站的响应时间和 HTTP 状态码**
```bash
curl -s -o /dev/null -w "URL: %{url_effective}\nHTTP Code: %{http_code}\nConnect Time: %{time_connect}s\nTotal Time: %{time_total}s\n" http://example.com
```
### 总结与学习建议
* `curl` 是一个极其灵活的工具,上述只是其常用功能的介绍。
* 使用 `man curl` 或 `curl --help` 可以查看所有选项和更详细的说明。
* 对于复杂的请求,建议将命令写在脚本文件中,或者使用 `\` 符号将长命令分行书写,以提高可读性。
* `httpbin.org` 是一个非常有用的服务,可以用来测试各种 HTTP 请求和查看 `curl` 发送的实际内容。
通过不断实践这些示例,并结合 `man` 手册,你可以熟练掌握 `curl` 并在各种场景下高效地使用它。
相关推荐
- 高一高二第一次月考认真作答(高二第一次月考的重要性)
-
正在进行高一、高二第一次月考,同学们正在认真完成化学试卷,研究考纲,探究考点,夯实基础,迎战高考!
- 山清水秀,盛世今朝(山清水秀出处)
-
万千星河,神州妖娆!山清水秀,盛世今朝!龙腾虎跃,锦绣前程!千里婵娟,祝福永远!
- 我校二模成绩已新鲜出炉(二模考试成绩)
-
充电加油备战高考,积极努力再拼一搏...
- Argon Design向瑞萨电子有限公司提供Argon Streams VP9许可证
-
英国剑桥--(美国商业资讯)--领先的先进视频验证解决方案提供商ArgonDesignLtd已与日本半导体公司瑞萨电子有限公司(RenesasElectronicsCorporation)签署...
- 高考倒计时75天(高考倒计时75天励志语)
-
今天是2022年3月24日星期四,距离2022年高考还有75天时间对于十八岁的高三学子来说,有些事情的确会影响你们的一生,但是没有一件事能决定你们的一生!努力的意义,就是:以后的日子里,放眼望去,全...
- 期中考试正在进行(期中考试在即)
-
转眼即瞬,期中考试已到,紧张忙碌的两个月学习,检验的时刻到了。让我们拿出信心和勇气,来挑战自我。面对考验,我们该做的就是沉着,冷静。让知识来一次次洗礼我们的灵魂,让失败和成功迎接一次次的成长。你们可以...
- 不要浪费了你NAS上的HDMI接口!详解华硕NAS上HDMI接口的妙用
-
不要浪费了你NAS上的HDMI接口!详解华硕NAS上HDMI接口的妙用之前我在本站分享我使用的华硕(ASUS)AS6704T...
- Java通过Kafka Streams库来实现数据流处理
-
#暑期创作大赛#...
- From abandoned mines to limpid streams waters: how banks profit from EOD
-
ByZENGYanglinInthecurrentpursuitofthe“dualcarbon”target(carbonpeakingandcarbonneutra...
- SPSS与Streams的集成实现实时预测
-
SPSSModeler是一个数据挖掘工作台,提供了一个可了解数据并生成预测模型的最先进的环境。Streams提供了一个可伸缩的高性能环境,对不断变化的数据进行实时分析,这些数据中包括传统结构的数据...
- Kafka Streams, 我还会再使用它吗?
-
DeeptiMittal4分钟阅读...
- 大数据Hadoop之——Kafka Streams原理介绍与简单应用示例
-
一、KafkaStreams概述官网文档:https://kafka.apache.org/32/documentation/streams/...
- Android上的TCP今天开始向用户推出,并将在下个月向所有用户提供
-
据extends网3月15日报道,Firefox今天宣布,其保护用户免受跟踪器攻击的全面cookie保护(TCP)功能现已在Android上可用。该功能默认启动模式,这样,跟踪器将无法收集有关用户的浏...
- Linux curl命令(linux curl命令安装)
-
Linuxcurl命令是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具。作为一款强力工具,curl支持包括HTTP、H...
- go语言http服务入门详解(go语言http服务器)
-
当你在浏览器中输入URL时,实际上是在发送一个对Web页面的请求。该请求被发送到服务器。服务器的工作是获取适当的页面并将其作为响应发送回浏览器。在Web的早期,服务器通常读取服务器硬盘上HTML文件的...
你 发表评论:
欢迎- 一周热门
-
-
前端面试:iframe 的优缺点? iframe有那些缺点
-
带斜线的表头制作好了,如何填充内容?这几种方法你更喜欢哪个?
-
漫学笔记之PHP.ini常用的配置信息
-
推荐7个模板代码和其他游戏源码下载的网址
-
其实模版网站在开发工作中很重要,推荐几个参考站给大家
-
[干货] JAVA - JVM - 2 内存两分 [干货]+java+-+jvm+-+2+内存两分吗
-
正在学习使用python搭建自动化测试框架?这个系统包你可能会用到
-
织梦(Dedecms)建站教程 织梦建站详细步骤
-
【开源分享】2024PHP在线客服系统源码(搭建教程+终身使用)
-
2024PHP在线客服系统源码+完全开源 带详细搭建教程
-
- 最近发表
-
- 高一高二第一次月考认真作答(高二第一次月考的重要性)
- 山清水秀,盛世今朝(山清水秀出处)
- 我校二模成绩已新鲜出炉(二模考试成绩)
- Argon Design向瑞萨电子有限公司提供Argon Streams VP9许可证
- 高考倒计时75天(高考倒计时75天励志语)
- 期中考试正在进行(期中考试在即)
- 不要浪费了你NAS上的HDMI接口!详解华硕NAS上HDMI接口的妙用
- Java通过Kafka Streams库来实现数据流处理
- From abandoned mines to limpid streams waters: how banks profit from EOD
- SPSS与Streams的集成实现实时预测
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)