curl发送get请求需用-g和--data-urlencode自动编码参数,-h指定请求头;post json须设content-type并确保-d内容合法;重定向用-l,超时分设--connect-timeout和--max-time,证书问题用--cacert;下载用-o/-j/-#,敏感信息应通过环境变量传入。

curl发送GET请求时如何带参数和请求头
直接在URL后拼接查询参数最简单,但要注意URL编码;更推荐用 -G 配合 --data-urlencode 自动处理编码问题。请求头必须用 -H 显式指定,比如加认证或模拟浏览器:curl -H "User-Agent: Mozilla/5.0" -H "Authorization: Bearer xyz" "https://api.example.com/data"。漏掉引号可能导致 shell 把空格或特殊字符截断,尤其是含冒号的 header 值。
POST提交JSON数据为什么总是400或415错误
两个关键点:必须同时设置 -H "Content-Type: application/json" 和用 -d 传合法 JSON 字符串(注意引号嵌套)。常见错误是写成 -d '{"key": value}'(value 未加引号)或漏掉 Content-Type。正确示例:curl -X POST -H "Content-Type: application/json" -d '{"name":"alice","age":30}' https://httpbin.org/post。如果 JSON 来自文件,用 -d @data.json 更安全。
curl如何处理重定向、超时和证书验证失败
默认不跟随 3xx 重定向,加 -L 才会跳转;超时建议分设连接和总耗时:--connect-timeout 5 --max-time 30;遇到自签名证书或证书过期,临时调试可用 -k(不推荐生产),更稳妥的是用 --cacert /path/to/cert.pem 指定可信 CA。忽略证书验证却没加 -k,curl 会直接报 SSL certificate problem 并退出。
下载文件时如何保留原始文件名并显示进度
用 -O 参数让 curl 从 URL 路径末尾提取文件名,配合 -J 可优先读取响应头中的 Content-Disposition;加 -# 显示进度条(纯文本环境友好),-v 则输出详细交互过程便于排查。例如:curl -O -J -# https://example.com/report.pdf。若目标 URL 不含文件扩展名或重定向后路径变化,-O 会失效,此时应手动指定输出名:-o report.pdf。
实际脚本中别硬编码敏感信息,像 token 或密码要通过环境变量注入,避免出现在命令历史或进程列表里。curl 的 exit code 很关键——22 表示 HTTP 错误状态码(如 404/500),不是网络不通,得结合 -f 才让它在这种情况下退出。










