GolangNote

Golang笔记

Golang 通过 API 更新 DNSPod DNS 设置

Permalink

DNSPod 提供了较简便的方式来更新自己账户下域名的 DNS,只需后台的 token,避免登录认证等麻烦。

使用现有的 go 语言库 github.com/nrdcg/dnspod-go,这个库比较简单,功能够用

操作过程

这里的目的是当服务器 IP 发生改变时,自动更新对应域名的 DNS 设置。

  1. 获取个人域名列表及域名ID
  2. 获取指定域名的记录及记录ID
  3. 通过域名 ID 和 记录 ID 更新 DNS

首次运行要实行前两步,获取两个 ID 后可直接做第三步。

有个小坑是: 完整的 API Token 是由 ID,Token 组合而成,用英文逗号分隔

首先是监测服务器外网 IP 是否变化,有很多网站都可以,如 https://httpbin.org/ip ,也可以在自己的在线网站写一个页面获取客户端的 IP

当 IP 改变就更新了。。。

获取账户下的域名

Go: 获取账户下的域名
1
2
3
4
5
6
7
8
9
10
11
12
params := dnspod.CommonParams{LoginToken: token, Format: "json"}
	dnsClient := dnspod.NewClient(params)
	
	domains, _, err := dnsClient.Domains.List()

	for _, dm := range domains {
		fmt.Printf("Domain: %s (id: %s)\n", dm.Name, dm.ID)
		if dm.Name == domain {
			getDomain, getDomainId = dm.Name, dm.ID.String()
			break
		}
	}

获取指定域名的记录

Go: 获取指定域名的记录
1
2
3
4
5
6
7
8
9
10
11
12
13
records, _, err := dnsClient.Records.List(domainId, "")
	if err != nil {
		log.Println(err)
		return
	}
	var getSubName, getSubNameId, oldValue string
	for _, record := range records {
		fmt.Printf("ID: %s, Name: %s, Type: %s, Value: %s \n", record.ID, record.Name, record.Type, record.Value)
		if record.Name == subName {
			getSubName, getSubNameId, oldValue = record.Name, record.ID, record.Value
			break
		}
	}

添加或更新

Go: 添加
1
2
3
4
5
6
7
record, _, err := dnsClient.Records.Create(dnObj.DomainId, dnspod.Record{
		Name:  subName,
		Type:  dnObj.Type,
		TTL:   "600", // seconds
		Value: serviceIp,
		Line:  "默认",
	})

Go: 更新
1
2
3
4
5
6
7
8
_, _, err = dnsClient.Records.Update(dnObj.DomainId, dnObj.SubNameId, dnspod.Record{
		ID:    dnObj.SubNameId, // 可选
		Name:  dnObj.SubName,  
		Type:  dnObj.Type,
		TTL:   "600", // seconds
		Value: serviceIp,
		Line:  "默认",
	})

参考

本文网址: https://golangnote.com/topic/302.html 转摘请注明来源

Related articles

Golang 把cookie 字符串解析为cookie 结构

在做爬虫时有时候会遇到需要带已登录的 cookie 请求,这个时候最简单的方法是在浏览器登录后,在开发者面板找到cookie 字符串,然后拷贝粘贴。这就面临一个问题需要把cookie 字符串解析成Go 语言 cookie 结构体。...

Golang http client 处理重定向网页

假设一个网址有多个重定向,A-B-C-D,使用 http.Client.Get 最后取得的内容是网址D的内容,我们该手动处理包含重定向的网址。...

Write a Comment to "Golang 通过 API 更新 DNSPod DNS 设置"

Submit Comment Login
Based on Golang + fastHTTP + sdb | go1.20 Processed in 0ms