whoissdk/README.md

109 lines
2.4 KiB
Markdown
Raw Permalink Normal View History

2026-03-19 11:53:07 +08:00
# sdk/whois
`b612.me/sdk/whois` 是一个面向 Go 的域名信息查询 SDK提供传统 WHOIS 与 RDAP 的统一查询入口。
## 功能概览
- 统一查询入口:`Lookup` / `LookupContext`
- 查询模式:`whois-only``rdap-only``auto-rdap``both-rdap``both-whois`
- 域名与 IP/ASN RDAP 查询
- RDAP Bootstrap内置 + 本地覆盖 + 远程刷新)
- 结构化解析结果 + 原始返回数据
- 统一代理配置RDAP + WHOIS与协议级覆盖
- 上下文超时、重试、错误分类与质量元信息
## 安装
```bash
go get b612.me/sdk/whois
```
## 快速开始
```go
package main
import (
"fmt"
"b612.me/sdk/whois"
)
func main() {
c := whois.NewClient()
res, meta, err := c.Lookup("example.com",
whois.WithLookupMode(whois.LookupModeAutoPreferRDAP),
)
if err != nil {
panic(err)
}
fmt.Println("source:", meta.Source)
fmt.Println("exists:", res.Exists())
fmt.Println("domain:", res.Domain())
fmt.Println("registrar:", res.Registrar())
}
```
## 查询模式说明
- `LookupModeWHOISOnly`:仅 WHOIS
- `LookupModeRDAPOnly`:仅 RDAP
- `LookupModeAutoPreferRDAP`:先 RDAP失败时回退 WHOIS
- `LookupModeBothPreferRDAP`:都查,合并结果,优先 RDAP 字段
- `LookupModeBothPreferWHOIS`:都查,合并结果,优先 WHOIS 字段
## 统一代理配置
从当前版本开始,支持统一代理配置:
- `WithLookupProxy(...)`:设置 RDAP + WHOIS 共享代理
- `WithLookupRDAPProxy(...)`:仅覆盖 RDAP 代理
- `WithLookupWHOISProxy(...)`:仅覆盖 WHOIS 代理
- `WithLookupWHOISDialer(...)`:直接注入 WHOIS TCP Dialer优先级最高
优先级规则:
- RDAP`RDAP.Proxy > Common.Proxy`
- WHOIS`WHOIS.Dialer > WHOIS.Proxy > Common.Proxy`
注意:
- WHOIS 是 TCP 协议,推荐/默认使用 `socks5://` 代理
- 仅写 `host:port` 时会自动按 `socks5://host:port` 处理
- WHOIS 不支持 `http://` 代理;若传入会快速返回错误
示例:
```go
res, meta, err := c.Lookup("example.com",
whois.WithLookupMode(whois.LookupModeAutoPreferRDAP),
whois.WithLookupProxy("socks5://127.0.0.1:1080"),
)
_ = res
_ = meta
_ = err
```
## RDAP Bootstrap 更新
可使用 SDK 提供的方法刷新 RDAP Bootstrap 数据(示例):
```go
_, err := whois.UpdateDefaultRDAPBootstrapFileFromURL(ctx, "rdap_dns.json")
if err != nil {
// handle error
}
```
## 测试
```bash
go test ./...
```
## License
本项目使用 Apache License 2.0,详见 `LICENSE` 文件。