0

编辑:我正在寻求有关 GoDaddy API 的帮助以及如何形成请求以便我可以删除记录。我可以替换记录并添加新记录,当然还可以读取记录。我不需要帮助构建模块。只是在弄清楚使用 API 在 GoDaddy 上进行删除的 REST API 部分时遇到问题。

我发现了这个:使用 Powershell 更新 GoDaddy API 上的 DNS 记录时出现错误 422

这给了我一个好的开始。我已经编写了许多函数来创建或修改各种不同类型的记录。一路走来,我学到了很多东西。到目前为止,我一直无法弄清楚的是如何使用 API 删除不再需要的现有记录。

我发现,如果我有一个相同名称和类型的现有记录并尝试创建一个新记录,它将用新值替换现有记录。如果它只是一个 A 记录并且这是你的愿望,那就太好了。但如果是 MX 或 NS 记录,那可能不是预期的结果。我正在研究辅助函数,以确保在发布到我的模块之前不会破坏现有记录。

我对阅读 API 文档和使用 REST API 比较陌生,所以我可能只是缺少一些基本的东西,但是如果有人可以为我提供一些关于如何配置我的调用的指导,以便我可以清理不再需要的记录。

我在正确格式化 SRV 记录时也遇到了一些问题,以便在我拨打电话时不会出错。我不确定我的问题出在哪里,并且在协议、服务等的允许/预期值的文档中没有看到任何内容。

这是我正在调用的代码的摘录:

try{
    $ret = Invoke-WebRequest https://api.godaddy.com/v1/domains/domain/records/$type/$alias -method put -headers $headers -Body $json -ContentType "application/json"
    if ($ret.StatusCode -eq 200) { Write-Verbose -Message "Success!" }
    else { Write-Warning -Message "ERROR" }
} catch {
    $result = $_.Exception.Response.GetResponseStream()
    $reader = New-Object System.IO.StreamReader($result)
    $reader.BaseStream.Position = 0
    $reader.DiscardBufferedData()
    $responseBody = $reader.ReadToEnd();
    $responseBody = $responseBody | ConvertFrom-Json | Format-Custom | Out-String
    Write-Warning -Message "ERROR: $responseBody"
}

您会认出这个代码块,因为它在很大程度上是从上述帖子中完整获取的。我将 $type 作为有效的记录类型(A、CNAME 等)传入。$alias 是现有记录的名称。$headers 是格式正确的标头,具有有效的密钥/秘密对(我能够获取和放置其他记录)。我曾尝试完全省略正文以删除一个值,但失败了。我尝试使用 JSON 空集 ([], [{}]) 来处理正文,并在 JSON 中传递没有值的数据和 TTL 值。我无法成功进行查询。我正在测试以下内容:

Invoke-WebRequest "https://api.godaddy.com/v1/domains/mydomain/records/A/test2" -method put -headers $header -ContentType "application/json" -Body '[{}]'

任何我没有找到的文档指导或指针将不胜感激。

4

2 回答 2

0

我有同样的问题,它是关于 JSON 编码的。我将向您展示一个 PHP 示例,您可以适应任何事情。GoDaddy 将提供的格式如下:

[{"":"","":"","":"",.....}]

我不知道 [] 从哪里来,但我删除了它们,解析 json 与常规 PHP 函数:

$json = str_replace("]","",$json);

//print_r($json);

$json = json_decode($json,true);

现在您将获得可用的对象。

向 GoDaddy 发送数据时,执行相同操作(我使用 curl)

$data = '[{"type":"'.$type.'","name":"'.$name.'","data":"'.$data.'","ttl":'.$ttl.'}]';

我为更新我的家庭服务器动态 IP 构建的完整示例 :) 检查函数 Update() 和 get()

https://github.com/yo3hcv/Dynamic-DNS-hosting-home-or-mobile-with-GoDaddy/blob/master/pip.php

于 2018-04-19T10:36:45.227 回答
0

这可能对其他人有用,因为我遇到了关于使用他们的 API 从 Godaddy 域中删除 DNS 记录的同样不确定性。

Godaddy 不支持删除单个记录。

从他们对是否可以删除记录的问题的支持:

尊敬的先生/女士,

这个 API 调用目前不存在,它是我们积压的东西,但没有 ETA 来创建它。当前,您可以使用记录类型上的 Put 端点来替换除您不想保留的端点之外的所有端点,或者您可以进入我们的 UI 以这种方式将其删除。

有关可用内容,请参阅他们的api 文档(截至 2020 年 7 月)。

但是,您可以做的是用新的集合替换所有现有记录。因此,假设您有三个子域 SD1、SD2 和 SD3 的 A 记录,并且您想要删除 SD2。您可以使用以下命令发送更新命令:

curl -X PUT "https://api.godaddy.com/v1/domains/<yourdomain>/records/A" -H "accept: application/json" -H "Content-Type: application/json" -H "Authorization: <yourAPIKEY>" -d "[ { \"data\": \"<IP for SD1>\", \"name\": \"SD1\", \"ttl\": 3600 }, { \"data\": \"<IP for SD3>\", \"name\": \"SD3\", \"ttl\": 3600 }]"

这将产生两条 A 记录,一条用于 SD1,一条用于 SD3。只要您至少还剩下一种记录类型(这也适用于 MX、MS、TXT),您就可以删除其他记录类型。

不幸的是,如果你想删除最后一个,你必须回到 Godaddy GUI。

于 2020-07-28T21:07:32.863 回答