GetClientIPInfoRaw 📡🧱
查询客户端出口 IP,返回原始响应字节。
🎯 跨域利器
GetClientIPInfoRaw 最经典的用法是后端把 JSONP 原始字节直接返回给浏览器,实现跨域"查我自己 IP"。也可拿客户端 IP 的 XML/CSV/YAML 透传下游。
签名
go
func (c *Client) GetClientIPInfoRaw(ctx context.Context, format string) ([]byte, error)端点
GET https://ipapi.co/{format}/与 GetClientIPInfo 同端点,返回原始字节。
客户端 IP 查询对照
| 方法 | 返回 | 解码 | 格式 | 典型场景 |
|---|---|---|---|---|
GetClientIPInfo | *IPInfo | json.Decode | 仅 json | 业务消费 |
GetClientIPInfoRaw | []byte | io.ReadAll | 全 5 种 | 透传/JSONP/非 JSON |
参数
| 参数 | 类型 | 说明 |
|---|---|---|
ctx | context.Context | 超时/取消 |
format | string | json/jsonp/xml/csv/yaml |
返回
[]byteerror
示例
go
csvData, _ := client.GetClientIPInfoRaw(ctx, string(ipapi.FormatCSV))
fmt.Println(string(csvData))JSONP:
go
client := ipapi.NewClient(ipapi.WithCallback("cb"))
data, _ := client.GetClientIPInfoRaw(ctx, string(ipapi.FormatJSONP))
// cb({"ip":"...","city":"..."})内部流程
🎨 一图抵千言
路径无 IP,省去 ValidateIP;与 GetClientIPInfo 的分叉点在最后——这里用 io.ReadAll 读原始字节,不 json.Decode。
何时用
- 需要客户端 IP 的 XML/CSV/YAML/JSONP 格式
- 后端把 JSONP 直接返回给浏览器跨域调用
⚠️ 安全提示
JSONP 跨域 handler 若把 callback 参数直接拼进响应而不校验,存在 XSS 风险。建议对 callback 做白名单或字符校验(仅允许 [A-Za-z0-9_.]+)后再透传。
go
func handler(w http.ResponseWriter, r *http.Request) {
cb := r.URL.Query().Get("callback")
c := ipapi.NewClient(ipapi.WithCallback(cb))
data, _ := c.GetClientIPInfoRaw(r.Context(), string(ipapi.FormatJSONP))
w.Header().Set("Content-Type", "application/javascript")
w.Write(data)
}下一步
- 📖 看
GetClientIPInfo - 📞 学 JSONP 回调
- 🧪 看 JSONP 示例