refactor(curl): 更新 JSON 响应结构和请求 URL

- 修改了 `Response` 结构体,添加了 `Message`, `TraceID`, 和 `Error` 字段,并将 `Code` 类型从 `string` 改为 `int`。
- 更新了 `Data` 结构体字段,以匹配新的 API 返回格式。
- 更改了目标 URL 为 `https://qifu.baidu.com/api/v1/ip-portrait/brief-info?ip=`。
- 添加了 `Referer` 请求头。
- 移除了不再需要的 `Cookie` 头。
- 调整了错误处理逻辑,根据 `Message` 字段判断返回数据是否符合预期。
This commit is contained in:
2025-09-18 11:54:16 +08:00
parent 2a09ec67d1
commit 1dddf8c18c
2 changed files with 26 additions and 22 deletions

48
curl.go
View File

@@ -11,24 +11,27 @@ import (
"time" "time"
) )
// Response 结构体用于存储整个JSON响应 // Response 结构体用于存储整个 JSON 响应
type JSON struct { type JSON struct {
Code string `json:"code"` Code int `json:"code"`
Data Data `json:"data"` Message string `json:"message"`
IP string `json:"ip"` Data Data `json:"data"`
TraceID string `json:"traceId"`
Error any `json:"error"`
} }
// Data 结构体用于存储"data"字段下的详细信息 // Data 结构体对应 JSON 里的 "data"
type Data struct { type Data struct {
Continent string `json:"continent"` Country string `json:"country"`
Country string `json:"country"` Province string `json:"province"`
Zipcode string `json:"zipcode"` City string `json:"city"`
Owner string `json:"owner"` ISP string `json:"isp"`
Isp string `json:"isp"` Scene string `json:"scene"`
Adcode string `json:"adcode"` Company string `json:"company"`
Prov string `json:"prov"` RiskScore string `json:"risk_score"`
City string `json:"city"` HitRiskNum int `json:"hit_risk_num"`
District string `json:"district"` QueryIP string `json:"query_ip"`
Version string `json:"version"`
} }
func isValidIP(ip string) bool { func isValidIP(ip string) bool {
@@ -78,8 +81,7 @@ func curl_(IP_ADDR string) (string, error) {
} }
// 目标 URL // 目标 URL
//URL_ADDR = "https://qifu.baidu.com/ip/geo/v1/district?ip=" + IP_ADDR URL_ADDR = "https://qifu.baidu.com/api/v1/ip-portrait/brief-info?ip=" + IP_ADDR
URL_ADDR = "https://qifu-api.baidubce.com/ip/geo/v1/district?ip=" + IP_ADDR
// 创建 HTTP 请求 // 创建 HTTP 请求
HTTP_Request, err = http.NewRequest("GET", URL_ADDR, nil) HTTP_Request, err = http.NewRequest("GET", URL_ADDR, nil)
@@ -87,6 +89,8 @@ func curl_(IP_ADDR string) (string, error) {
log.Printf("创建请求时出错: %v", err) log.Printf("创建请求时出错: %v", err)
} }
Referer := "https://qifu.baidu.com/?activeKey=SEARCH_IP&trace=apistore_ip_aladdin&activeId=SEARCH_IP_ADDRESS&ip=" + IP_ADDR
// 设置请求头 // 设置请求头
HTTP_Request.Header.Set("User-Agent", "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Mobile Safari/537.36") HTTP_Request.Header.Set("User-Agent", "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Mobile Safari/537.36")
HTTP_Request.Header.Set("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7") HTTP_Request.Header.Set("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7")
@@ -94,8 +98,7 @@ func curl_(IP_ADDR string) (string, error) {
HTTP_Request.Header.Set("Accept-Language", "zh-CN,zh;q=0.9,en;q=0.8") HTTP_Request.Header.Set("Accept-Language", "zh-CN,zh;q=0.9,en;q=0.8")
HTTP_Request.Header.Set("Cache-Control", "max-age=0") HTTP_Request.Header.Set("Cache-Control", "max-age=0")
HTTP_Request.Header.Set("Connection", "keep-alive") HTTP_Request.Header.Set("Connection", "keep-alive")
HTTP_Request.Header.Set("Cookie", "BIDUPSID=04922F7E0DDC6A5B7E0BA15C33FD2176; PSTM=1722408897; BAIDUID=8313999060289847CAE0A6F34A9C4206:FG=1; Hm_lvt_edc762f9f8f5f525fad4770a32b5edda=1724987641; Hm_lvt_28a17f66627d87f1d046eae152a1c93d=1724987645; AGL_USER_ID=186badbd-dd36-4d39-89f4-8d2aa7a01414; BDUSS=1pvWmdhYThIelRSS1NuQkJESHNYV0REcG9teXMxOW9VaURTU2tyRlZTZ3Z4dmhtRVFBQUFBJCQAAAAAAAAAAAEAAADGRkRexaPT8cHrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC850WYvOdFmM") HTTP_Request.Header.Set("Host", "qifu.baidu.com")
HTTP_Request.Header.Set("Host", "qifu-api.baidubce.com")
HTTP_Request.Header.Set("Sec-Ch-Ua", `"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"`) HTTP_Request.Header.Set("Sec-Ch-Ua", `"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"`)
HTTP_Request.Header.Set("Sec-Ch-Ua-Mobile", "?1") HTTP_Request.Header.Set("Sec-Ch-Ua-Mobile", "?1")
HTTP_Request.Header.Set("Sec-Ch-Ua-Platform", `"Android"`) HTTP_Request.Header.Set("Sec-Ch-Ua-Platform", `"Android"`)
@@ -104,6 +107,7 @@ func curl_(IP_ADDR string) (string, error) {
HTTP_Request.Header.Set("Sec-Fetch-Site", "none") HTTP_Request.Header.Set("Sec-Fetch-Site", "none")
HTTP_Request.Header.Set("Sec-Fetch-User", "?1") HTTP_Request.Header.Set("Sec-Fetch-User", "?1")
HTTP_Request.Header.Set("Upgrade-Insecure-Requests", "1") HTTP_Request.Header.Set("Upgrade-Insecure-Requests", "1")
HTTP_Request.Header.Set("Referer", Referer)
// 创建 HTTP 客户端并设置超时时间 // 创建 HTTP 客户端并设置超时时间
HTTP_CLIENT = &http.Client{Timeout: 10 * time.Second} HTTP_CLIENT = &http.Client{Timeout: 10 * time.Second}
@@ -142,10 +146,10 @@ func curl_(IP_ADDR string) (string, error) {
} }
// 确保数据有效 // 确保数据有效
if HTPP_JSON.Code != "Success" { if HTPP_JSON.Message != "success" {
log.Printf("返回数据不符合预期: %s", HTPP_JSON.Code) log.Printf("返回数据不符合预期: %d", HTPP_JSON.Code)
return "", fmt.Errorf("返回数据不符合预期: %s", HTPP_JSON.Code) return "", fmt.Errorf("返回数据不符合预期: %d", HTPP_JSON.Code)
} }
return fmt.Sprintf("%s%s", HTPP_JSON.Data.Continent, HTPP_JSON.Data.Country), err return fmt.Sprintf("%s%s", HTPP_JSON.Data.Country, HTPP_JSON.Data.Province), err
} }

BIN
denyip

Binary file not shown.