💡 带 API Key 认证
配置 API Key 提升配额与稳定性。
🎨 一图抵千言
调用结构如下:环境变量注入 Key → 函数式选项注入 Client → 每次请求由内部 applyAuth 注入 Authorization: Bearer → 发起请求。
场景
生产环境、高流量服务需要认证。
Header 模式(默认推荐)
go
func main() {
client := ipapi.NewClient(
ipapi.WithAPIKey(os.Getenv("IPAPI_KEY")),
)
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
info, err := client.GetIPInfo(ctx, "8.8.8.8", "json")
if err != nil {
if errors.Is(err, ipapi.ErrInvalidKey) {
log.Fatal("API Key 无效,请检查")
}
log.Fatal(err)
}
fmt.Println(info.City)
}内部发送 Authorization: Bearer <key>。
🎨 一图抵千言
从时序视角看一次带 Key 请求的往返:调用方、SDK 内部、ipapi.co 服务三者之间的交互如下。
Query 模式
go
client := ipapi.NewClient(
ipapi.WithAPIKey(os.Getenv("IPAPI_KEY")),
ipapi.WithAPIKeyQuery(), // ?key=...
)用于 JSONP 等无法设 Header 的场景。
安全最佳实践
🔐 勿硬编码
go
// ❌ 危险
client := ipapi.NewClient(ipapi.WithAPIKey("sk-xxx-hardcoded"))
// ✅ 安全
client := ipapi.NewClient(ipapi.WithAPIKey(os.Getenv("IPAPI_KEY")))- 用环境变量 / 密钥管理
.env加入.gitignore- 定期轮换 Key
- 403 时检查 Key(
ErrInvalidKey)
运行
bash
export IPAPI_KEY="your_key_here"
go run main.go📋 运行预期输出与常见问题
预期输出(Header 模式,Key 有效):
txt
Mountain View常见问题:
403 Forbidden/ErrInvalidKey:环境变量未设置或 Key 失效,检查IPAPI_KEY是否正确导出。- 仍被限流(
ErrRateLimited):即使带 Key 也可能触发,确认套餐配额;可重试,详见 错误处理。 - Query 模式仍走 Header:确认同时传了
WithAPIKeyQuery,它将APIKeyMode切换为 Query 模式。 - JSONP 场景建议用 Query 模式,因为浏览器无法附带自定义 Header。
下一步
- 🔒 学 认证机制
- 📖 看
WithAPIKey/WithAPIKeyQuery - 🛡 学 错误处理