Linux curl 命令用法

curl 是一个强大的命令行工具,用于传输数据,支持多种协议(HTTP、HTTPS、FTP 等)。以下是详细用法:

一、基本语法

复制代码
curl [options] [URL]

二、常用选项分类

1. 请求方法

复制代码
# GET(默认)
curl https://api.example.com/data

# POST
curl -X POST https://api.example.com/data
curl -X POST -d "name=value" https://api.example.com

# PUT
curl -X PUT https://api.example.com/data

# DELETE
curl -X DELETE https://api.example.com/data

# PATCH
curl -X PATCH https://api.example.com/data

2. 发送数据

复制代码
# 发送表单数据
curl -d "param1=value1&param2=value2" https://example.com

# 发送JSON数据
curl -H "Content-Type: application/json" -d '{"key":"value"}' https://example.com

# 发送文件内容
curl -d @data.json https://example.com

# 发送multipart/form-data(文件上传)
curl -F "file=@/path/to/file" -F "name=test" https://example.com/upload

3. 设置请求头

复制代码
# 单个请求头
curl -H "Authorization: Bearer token123" https://api.example.com

# 多个请求头
curl -H "Content-Type: application/json" -H "X-API-Key: abc123" https://api.example.com

# 自定义User-Agent
curl -A "Mozilla/5.0" https://example.com

4. 处理响应

复制代码
# 显示响应头
curl -i https://example.com      # 包含响应头
curl -I https://example.com      # 仅响应头(HEAD请求)

# 保存响应到文件
curl -o output.html https://example.com
curl -O https://example.com/file.zip      # 使用远程文件名

# 显示详细过程
curl -v https://example.com      # 显示请求/响应详细信息
curl --trace-ascii debug.txt https://example.com

# 静默模式
curl -s https://example.com      # 不显示进度和错误信息
curl -sS https://example.com     # 静默但显示错误

5. 认证相关

复制代码
# 基本认证
curl -u username:password https://example.com

# Bearer Token认证
curl -H "Authorization: Bearer token123" https://api.example.com

# Cookie
curl -b "name=value" https://example.com          # 发送Cookie
curl -c cookies.txt https://example.com           # 保存Cookie到文件
curl -b cookies.txt https://example.com           # 从文件读取Cookie

6. 网络设置

复制代码
# 超时设置
curl --connect-timeout 10 https://example.com      # 连接超时10秒
curl --max-time 30 https://example.com             # 总超时30秒

# 跟随重定向
curl -L https://example.com
curl --max-redirs 5 https://example.com           # 限制重定向次数

# 代理设置
curl -x http://proxy.example.com:8080 https://target.com
curl --proxy-user user:pass -x http://proxy:8080 https://target.com

7. SSL/TLS设置

复制代码
# 跳过证书验证(测试用)
curl -k https://example.com

# 指定客户端证书
curl --cert client.pem --key key.pem https://example.com

# 指定CA证书
curl --cacert ca.pem https://example.com

8. 下载控制

复制代码
# 断点续传
curl -C - -O https://example.com/largefile.zip

# 限速
curl --limit-rate 100k -O https://example.com/file.zip

# 并发下载多个文件
curl -O https://example.com/file1.zip -O https://example.com/file2.zip

三、实用示例

1. API测试

复制代码
# GET请求
curl "https://api.github.com/users/octocat"

# POST JSON数据
curl -X POST -H "Content-Type: application/json" \
  -d '{"title":"Test","body":"Content"}' \
  https://api.example.com/posts

# 带认证的API调用
curl -H "Authorization: token YOUR_TOKEN" \
  https://api.github.com/user/repos

2. 文件操作

复制代码
# 上传文件
curl -F "file=@/path/to/local/file" https://example.com/upload

# 下载文件并显示进度条
curl -# -O https://example.com/file.zip

# 下载文件到指定目录
curl -o /tmp/file.zip https://example.com/file.zip

3. 调试和测试

复制代码
# 查看请求详情
curl -v -X POST -d "test=data" https://example.com

# 测试响应时间
curl -w "time_total: %{time_total}\n" https://example.com

# 获取HTTP状态码
curl -o /dev/null -s -w "%{http_code}\n" https://example.com

4. 批量操作

复制代码
# 从文件读取多个URL
curl -K urls.txt

# urls.txt内容示例:
# url = "https://example.com/1"
# output = "file1.txt"
# url = "https://example.com/2"
# output = "file2.txt"

# 使用通配符
curl -O "https://example.com/files/file[1-3].txt"

四、高级技巧

1. 格式化输出

复制代码
# 使用jq处理JSON响应
curl -s https://api.example.com/data | jq '.'

# 自定义输出格式
curl -w "DNS: %{time_namelookup} Connect: %{time_connect}\n" https://example.com

2. 环境变量

复制代码
# 使用环境变量存储敏感信息
export API_TOKEN="your_token"
curl -H "Authorization: Bearer $API_TOKEN" https://api.example.com

3. 脚本中使用

复制代码
#!/bin/bash
response=$(curl -s https://api.example.com/data)
if [ $? -eq 0 ]; then
    echo "Success: $response"
else
    echo "Failed"
fi

五、常用变量(-w选项)

复制代码
# 可用的变量:
%{http_code}      # HTTP状态码
%{time_total}     # 总时间
%{time_connect}   # 连接时间
%{time_namelookup}# DNS时间
%{size_download}  # 下载字节数
%{speed_download} # 下载速度
%{url_effective}  # 最终URL(跟随重定向后)

六、注意事项

  1. 安全性:不要在命令行中直接暴露密码,使用环境变量或配置文件
  2. 证书验证 :生产环境不要使用-k选项
  3. 性能 :大量请求时考虑使用连接复用(--keepalive-time
  4. 编码:注意URL编码,特殊字符需要转义

七、查看帮助

复制代码
curl --help        # 简要帮助
man curl           # 完整手册
curl --manual      # 详细手册

八、实战

curl -X POST \

-H "Content-Type: application/x-www-form-urlencoded" \

-H "Authorization: Bearer token" \

-d "method=c_&tags=\\A290213PT0A008840" \

http://tzy.com/mxywebapi/webapi/PSpaceQuery.ashx

curl -X POST "http://tzy.com/auth/dreamCloudReturn" \

-H "Content-Type: application/json" \

-d '{

"applyClientId": "w20thf500dom",

"jwt": "token"

}'

相关推荐
gjc5924 分钟前
踩坑实录:MySQL服务器CPU爆高,元凶竟是SELinux的setroubleshootd?
运维·服务器·数据库·mysql·adb
我才是一卓8 分钟前
linux 安装简易 git 服务端并使用
linux·运维·git
德彪稳坐倒骑驴11 分钟前
MySQL Server 5.5 win端安装,安装SQLyog
运维·服务器
Wanliang Li17 分钟前
AArch64虚拟化——virtio-mmio实现
linux·虚拟化·virtio·hypervisor·mmio
乔宕一1 小时前
windows SSH服务修改SSH登陆后的默认终端
运维·windows·ssh
嵌入式-老费1 小时前
vivado hls的应用(第一个axi接口的ip)
linux·服务器·tcp/ip
旺仔.2911 小时前
Linux系统基础详解(二)
linux·开发语言·网络
x***r1511 小时前
Notepad++ 8.6 安装教程:详细步骤+自定义安装路径(附注意事项)
linux·前端·javascript
big_rabbit05021 小时前
JVM堆内存查看命令
java·linux·算法
bwz999@88.com2 小时前
联想SR5507X04安装ubuntu-24.04.4 server,采用 Linux 原生mdadm(mdraid)软 RAID+LVM分区
运维·服务器