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"

}'

相关推荐
AlfredZhao1 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334661 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪1 天前
linux 拷贝文件或目录到指定的位置
linux
大树882 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠2 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质2 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush42 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5202 天前
Linux 11 动态监控指令top
linux
Inhand陈工2 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智2 天前
ARP代理--工作原理
运维·网络·arp·arp代理