whoissdk/README.md
2026-03-19 11:53:07 +08:00

109 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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` 文件。