Использую DNS-сервера Hetzner. Возникла необходимость обновлять записи через Hetzner DNS Public API.
Запрос cURL, отправленный через bash и составленный по примерам в
документации к API
curl -X "PUT" "https://dns.hetzner.com/api/v1/records/{457bcee459d6932084bb1bc915210f88}" \
-H 'Content-Type: application/json' \
-H 'Auth-API-Token: LlGoDUQ39S6akqoav5meAsv5OIpeywhj' \
-d $'{
"value": "1.1.1.90",
"ttl": 60,
"type": "A",
"name": "www",
"zone_id": "oH7shFebR6nLPgTnmvNjM8"
}'
завершается успешно
record":{"id":"457bcee459d6932084bb1bc915210f88","type":"A","name":"www","value":"1.1.1.90","ttl":60,"zone_id":"oH7shFebR6nLPgTnmvNjM8","created":"2022-07-16 11:51:06.063 +0000 UTC","modified":"2022-07-17 09:16:05.809 +0000 UTC"}}
Запрос же из приложения на go (код взят из примеров той же документации)
package main
import (
"fmt"
"io/ioutil"
"net/http"
"bytes"
)
func sendUpdateRecord() {
// Update Record (PUT https://dns.hetzner.com/api/v1/records/{RecordID})
json := []byte(`{"value": "1.1.1.90","ttl": 60,"type": "A","name": "www","zone_id": "oH7shFebR6nLPgTnmvNjM8"}`)
body := bytes.NewBuffer(json)
// Create client
client := &http.Client{}
// Create request
req, err := http.NewRequest("PUT", "https://dns.hetzner.com/api/v1/records/{457bcee459d6932084bb1bc915210f88}", body)
// Headers
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Auth-API-Token", "LlGoDUQ39S6akqoav5meAsv5OIpeywhj")
// Fetch Request
resp, err := client.Do(req)
if err != nil {
fmt.Println("Failure : ", err)
}
// Read Response Body
respBody, _ := ioutil.ReadAll(resp.Body)
// Display Results
fmt.Println("response Status : ", resp.Status)
fmt.Println("response Headers : ", resp.Header)
fmt.Println("response Body : ", string(respBody))
}
завершается ошибкой
PS C:\Dev\Go\test> go run main.go
response Status : 404 Not Found
response Headers : map[Access-Control-Allow-Origin:[*] Content-Length:[142] Content-Type:[application/json; charset=utf-8] Date:[Sun, 17 Jul 2022 09:15:40 GMT] Ratelimit-Limit:[40000] Ratelimit-Remaining:[39991] Ratelimit-Reset:[2660] Vary:[Origin] X-Ratelimit-Limit-Hour:[40000] X-Ratelimit-Remaining-Hour:[39991]]
response Body : {"record":{"id":"","type":"","name":"","value":"","zone_id":"","created":"","modified":""},"error":{"message":"record not found","code":404}}
Прошу помочь найти ошибку или подсказать, как это правильно загуглить и где взять правильные примеры реализации запросов.
P.S. При использовании инструмента
/tool fetch
в роутере Mikrotik, для взаимодействия с этим же API, запрос завершается такой же ошибкой.