使用GoDaddy API获取域名domain、nameServers及expires字段失败的问题排查
GoDaddy API获取域名domain、nameServers及expires字段失败的问题排查
看起来你遇到的核心问题是调用了错误的GoDaddy API端点——你需要的是域名本身的元数据(包括到期时间、域名服务器),但你一直在调用DNS记录相关的接口,自然拿不到想要的字段。我来帮你拆解问题并给出正确的解决方案:
先搞清楚API端点的区别
GoDaddy的API分工很明确:
/v1/domains/{domain}/records/...:这个系列接口是用来管理DNS记录的,返回的是该域名下的A/CNAME/MX等记录的具体信息,完全不包含域名的到期时间、域名服务器这类元数据。/v1/domains/{domain}:这才是获取域名基本信息的正确接口,返回的数据里包含你需要的domain、nameServers、expires字段。
分析你之前代码的问题
- 第一次调用的
/v1/domains/example.com/records/A/@:返回的仅仅是@主机的A记录详情,只有data、name、ttl这类DNS记录字段,根本没有expires和nameServers,所以你永远拿不到这些值。 - 第二次调用的
/v1/domains/example.com/records/:返回的是该域名下所有DNS记录的数组,同样不包含域名元数据。你尝试取$content[0].data得到的是第一条DNS记录的值,不是域名本身;而且$status、$expires这些变量根本没从响应里赋值,自然输出为空。
正确的代码实现
下面是修改后的完整代码,直接调用正确的API端点来获取你需要的字段:
# 加载配置文件 . .\configs\example.com_update_gd_dns_cfg.ps1 # 设置请求头,明确指定接受JSON格式 $headers = @{ "Authorization" = "sso-key $($key):$($secret)" "Accept" = "application/json" } # 调用获取域名基本信息的API端点 $apiUri = "https://api.godaddy.com/v1/domains/$($domain)" $result = Invoke-WebRequest -Uri $apiUri -Method Get -Headers $headers # 解析JSON响应内容 $domainInfo = ConvertFrom-Json $result.Content # 输出你需要的字段 Write-Output "Domain: $($domainInfo.domain)" Write-Output "Name Servers: $($domainInfo.nameServers -join ', ')" # 可选:把ISO格式的到期时间转换成更易读的格式 Write-Output "Expires At: $(Get-Date $domainInfo.expires -Format 'yyyy-MM-dd HH:mm:ss')"
额外注意事项
- 确保你的API密钥和秘钥拥有域名读取权限:在GoDaddy开发者后台创建密钥时,要选择对应的权限范围,否则可能会返回403禁止访问错误。
- 如果是测试环境,需要把API地址换成
https://api.ote-godaddy.com/v1/domains/$($domain)(OTE是GoDaddy的官方测试环境)。
备注:内容来源于stack exchange,提问作者hod alkaly




