Skip to content

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*IPInfojson.Decodejson业务消费
GetClientIPInfoRaw[]byteio.ReadAll全 5 种透传/JSONP/非 JSON

参数

参数类型说明
ctxcontext.Context超时/取消
formatstringjson/jsonp/xml/csv/yaml

返回

  • []byte
  • error

示例

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)
}

下一步

基于 MIT 许可证发布