GoDaddy DNS API - 使用众多命令构建模块

时间:2017-10-04 20:46:37

标签: rest powershell godaddy-api

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

我发现了这个:Error 422 When Using Powershell to Update DNS Records on GoDaddy API

这给了我一个良好的开端。我已经编写了许多函数来创建或修改各种不同类型的记录。我一路上学到了很多东西。到目前为止我无法弄清楚的是如何使用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 '[{}]'

我非常感谢任何我未找到的文档指南或指示。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

这可能对其他人很有用,因为我同样不确定使用其API从Godaddy域中删除DNS记录。

Godaddy不支持删除单个记录。

在他们是否可以删除记录的问题上,他们的支持:

尊敬的先生/女士,

此API调用目前尚不存在,需要进行积压,但尚无创建它的ETA。当前,您可以使用“记录类型”上的“放置”端点来替换除不想保留的端点之外的所有端点,或者可以进入我们的用户界面以这种方式删除它。

请参阅他们的api documentation以获取可用的信息(在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。