错误信息

Mac 上的“curl: (6) Could not resolve host”

curl 退出码 6 表示 curl 无法获取主机名对应的地址。curl 文档的说明是:“The given remote host was not resolved.”

适用于:所有当前 macOS 版本上 macOS 自带的 curl 和 Homebrew 版 curl。核查日期:2026年10月29日

症状

  • “终端”显示 curl: (6) Could not resolve host: example.com。
  • 使用 curl 的脚本和安装程序以退出码 6 中止。
  • 同一地址在浏览器中能打开,或者在浏览器中也失败。

可能的原因

  • 输入错误或主机名为空。脚本中的变量可能为空,导致 curl 拿到错误的名称。
  • 没有连接或没有 DNS。Mac 无法连接到 DNS 服务器。
  • VPN 使用自己的 DNS。公司内部名称只有在 VPN 打开时才能解析。
  • curl 没有使用代理。在只允许通过代理上网的网络中,curl 需要代理设置,然后由代理来解析名称。

如何检查

  1. 打印出完整的命令,确认主机名正确。

  2. 通过 macOS 解析器查询该名称。

    dscacheutil -q host -a name example.com
  3. 直接询问公共 DNS 服务器。如果这里有结果而上一步没有,问题出在 DNS 设置上。

    dig +short example.com @1.1.1.1
  4. 显示 curl 读取的代理变量。

    env | grep -i proxy
  5. 带详细信息运行 curl。前几行显示的是查询过程。

    curl -v https://example.com

如何修复

  1. 如果 macOS 查询也失败,请修复 DNS。请参阅Mac 上 DNS 无法解析。

  2. 如果网络需要代理,请为 curl 设置代理。

    export https_proxy=http://proxy.example.com:8080
  3. 对于公司内部名称,请先连接 VPN。

  4. 刷新 DNS 缓存,然后再试一次。请参阅在 Mac 上刷新 DNS 缓存。

使用 Kilobat

  1. Kilobat 的连接诊断会逐层测试该名称:网络、代理、DNS、规则、IPv4、IPv6、TLS 和服务器,并指出失败的那一层。

    kilobat why example.com
  2. 要使用某个正在运行的进程的代理变量,请添加 --app 并带上进程名称。

    kilobat why https://example.com --app process:curl
  3. Kilobat 的这些检查都是免费的。AI 智能体可以通过 MCP 用 diagnose_connection 和 diagnose_network 运行它们。请参阅找出某个网站或 API 连不上的原因。

常见问题

为什么浏览器正常,curl 却不行?

浏览器可以使用系统代理或自己的 DNS,而 curl 读取的是 https_proxy 等代理变量。请参阅Mac 上代理设置导致 App 无法连接。

参考资料

  • curl:libcurl error codes
  • curl(1),EXIT CODES,macOS 27.2 自带的 man 手册页
  • dscacheutil(1) 和 dig(1),macOS 27.2 自带的 man 手册页

参考资料核查于 2026年10月29日。man 手册页为 macOS 自带版本;在“终端”中用 man <name> 打开。