使用curl请求含IPv6地址的URL失败,如何解决?
解决curl请求IPv6地址API的问题
直接把IPv6地址用方括号[]包裹起来就能解决这个问题,修正后的curl命令如下:
curl 'https://demo.ip-api.com/json/[2a01:4f9:c011:7ad7::1]?fields=66842623&lang=en'
原因说明
curl会把URL里的冒号默认解析成端口分隔符,但IPv6地址本身包含大量冒号,这就导致解析混乱。而URL标准明确要求IPv6地址必须用方括号包裹,以此区分开地址和端口部分。浏览器和PowerShell的Invoke-WebRequest会自动帮你处理这个包裹逻辑,但curl需要你手动加上方括号。
之前尝试转义冒号没用,是因为这不是正确的处理方式——转义冒号改变了IPv6地址本身的格式,API无法识别,而用方括号包裹既保留了地址的正确性,又让curl能正确解析URL结构。
内容的提问来源于stack exchange,提问作者ToK
相关产品推荐
相关产品推荐

