CloudFlare的API文档地址
https://api.cloudflare.com/#dns-records-for-a-zone-update-dns-record
package main
import (
"errors"
"fmt"
"io/ioutil"
"net/http"
"regexp"
"strings"
)
const (
AuthEmail = "YOUR_EMAIL"
AuthKey = "YOUR_AUTH_KEY"
ZoneID = "YOUR_ZONE_ID"
DNSRecordID = "YOUR_RECORD_ID"
)
func apiRequest(url, data string) ([]byte, error) {
var request *http.Request
var err error
if data == "" {
request, err = http.NewRequest("GET", url, nil)
} else {
request, err = http.NewRequest("PUT", url, strings.NewReader(data))
}
if err != nil {
return nil, err
}
request.Header.Add("X-Auth-Email", AuthEmail)
request.Header.Add("X-Auth-Key", AuthKey)
request.Header.Add("Content-Type", "application/json")
client := &http.Client{}
response, err := client.Do(request)
if err != nil {
return nil, err
}
defer response.Body.Close()
body, err := ioutil.ReadAll(response.Body)
if err != nil {
return nil, err
}
if response.StatusCode == 200 {
return body, nil
} else {
return nil, errors.New(string(body))
}
}
func getRecord() string {
url := fmt.Sprintf("https://api.cloudflare.com/client/v4/zones/%s/dns_records/%s", ZoneID, DNSRecordID)
r, err := apiRequest(url, "")
if err != nil {
return err.Error()
}
match := regexp.MustCompile(`"content":"([\d\.]+)"`).FindSubmatch(r)
if len(match) == 2 {
return string(match[1])
}
return "error 00"
}
func updateRecord(ip string) string {
url := fmt.Sprintf("https://api.cloudflare.com/client/v4/zones/%s/dns_records/%s", ZoneID, DNSRecordID)
r, err := apiRequest(url, fmt.Sprintf(`{"type":"A","name":"share.moguapp.net","content":"%s"}`, ip))
if err != nil {
return err.Error()
}
if strings.Contains(string(r), `"errors":[]`) {
return "success"
}
return "error 01"
}
func main() {
u := updateRecord("127.0.0.5")
fmt.Println(u)
r := getRecord()
fmt.Println(r)
}