系统学习 Windows 学习路径:从 CMD 到 PowerShell、系统网络,再到 WSL 与 Server

curl

用 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

易错点与排错

相关命令

参考链接

读完自测

合上页面,先回答,再展开对照。

  1. 为什么在 Windows PowerShell 5.1 里 curl 和 curl.exe 行为不同?
  2. curl 默认跟随重定向吗?系统代理会自动生效吗?
  3. 遇到 curl: (60) 证书错误,正确的排查顺序是什么?为什么不要直接用 -k?
答案
  1. PowerShell 5.1 把 curl 别名到 Invoke-WebRequest,参数不同;curl.exe 才是真正的 curl,PowerShell 7+ 已移除该别名。
  2. 默认不跟随,需要 -L;默认不读 WinINET/WinHTTP 系统代理,需要 --proxy 或环境变量。
  3. 先用 -v 看签发者、有效期和主机名,再修证书链或安装企业根证书;-k 会关闭校验,掩盖中间人风险,不能用于生产。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令