用 curl.exe 发起 HTTP(S) 请求、下载文件并排查 TLS。
Windows 10 1803 起和 Windows 11 自带 curl.exe,位于 C:\Windows\System32,支持 HTTP、HTTPS、FTP、SFTP 等协议。它来自上游 curl 项目,参数与 Linux/macOS 基本一致;Windows 构建通常使用 Schannel,证书校验走 Windows 证书存储。
边界:curl 不是浏览器,不执行 JavaScript,也不自动读 WinINET/WinHTTP 的系统代理设置;需要 --proxy 或 http_proxy/https_proxy 环境变量。它不会自动跟随重定向,-L 才跟随。-k 会关闭证书校验,只能用于临时诊断,不能写进生产脚本。
最大的 Windows 坑是 PowerShell:Windows PowerShell 5.1 把 curl 定义为 Invoke-WebRequest 的别名,参数完全不同;PowerShell 7+ 不再保留该别名。无论哪个版本,写 curl.exe 最稳。CMD 里 curl 一般直接调用 curl.exe,但脚本统一写全名更清晰。
# 1. 只取响应头;有些服务器拒绝 HEAD,失败时改用下一条
C:\> curl.exe -I https://example.com
# 2. 用 GET 取头部并丢弃正文,NUL 是 Windows 的空设备
C:\> curl.exe -sS -D - -o NUL https://example.com
# 3. 跟随重定向下载到指定目录,显示错误但隐藏进度条
C:\> curl.exe -L -sS -o C:\temp\file.zip https://example.com/file.zip
# 4. 只输出状态码和总耗时,适合健康检查脚本
C:\> curl.exe -sS -o NUL -w "%{http_code} %{time_total}\n" https://example.com/health
# 5. POST JSON,正文放文件避免 CMD 引号转义问题
C:\> curl.exe -X POST -H "Content-Type: application/json" -d @payload.json https://api.example.com/items
# 6. 详细输出连接、TLS 和代理过程,定位证书或超时问题
C:\> curl.exe -v --connect-timeout 5 --max-time 20 https://example.com
# 7. 显式走代理;本地地址可加 --noproxy "*" 绕过
C:\> curl.exe --proxy http://proxy.example.com:8080 https://example.com
# 8. 查看版本和 TLS 后端,确认是否使用 Schannel
C:\> curl.exe -V
curl -I 报参数错误,是因为 curl 被别名到 Invoke-WebRequest;改用 curl.exe,或临时 Remove-Item Alias:curl。CMD 不受影响。-I 发的是 HEAD,部分服务器返回 405/403,这不代表 GET 不可用;用 -D - -o NUL 发 GET 看真实状态和头部。curl: (60) SSL certificate problem 说明证书链校验失败;先 -v 看签发者和有效期,把企业根证书装进 Windows 证书存储,或临时用 --cacert。不要用 -k 掩盖问题。--proxy 或环境变量,内网地址再加 --noproxy 或 NO_PROXY。-L,并用 --max-redirs 限制跳转次数,避免循环。-s 会连错误信息一起隐藏,脚本里用 -sS;需要失败重试时加 --retry,但注意默认只重试部分瞬时错误。-o C:\path\file 的路径要用引号包住含空格的目录;CMD 批处理里 %{http_code} 的百分号要写成 %%,交互式 CMD 才写单个 %。curl.exe -V 确认特性,再决定是否安装官方 curl。合上页面,先回答,再展开对照。
curl 和 curl.exe 行为不同?curl: (60) 证书错误,正确的排查顺序是什么?为什么不要直接用 -k?curl 别名到 Invoke-WebRequest,参数不同;curl.exe 才是真正的 curl,PowerShell 7+ 已移除该别名。-L;默认不读 WinINET/WinHTTP 系统代理,需要 --proxy 或环境变量。-v 看签发者、有效期和主机名,再修证书链或安装企业根证书;-k 会关闭校验,掩盖中间人风险,不能用于生产。
小程序版
微信扫码,随时查命令