效果:
实现代码main.go
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"os"
)
type AreaData struct {
Continent string `json:"continent"`
Country string `json:"country"`
ZipCode string `json:"zipcode"`
Owner string `json:"owner"`
Isp string `json:"isp"`
Adcode string `json:"adcode"`
Prov string `json:"prov"`
City string `json:"city"`
District string `json:"district"`
}
type IpData struct {
Code string `json:"code"`
Data AreaData `json:"data"`
Ip string `json:"ip"`
}
func main() {
var args = os.Args
if len(args) > 1 {
for index, val := range args {
if index > 0 {
fmt.Printf("parsms[%d]: %s\n", index, val)
}
}
} else {
fmt.Println("no args ip address to check exp: ./checkip 14.23.36.151")
return
}
//ip := "14.23.36.151"
url := fmt.Sprintf("https://qifu-api.baidubce.com/ip/geo/v1/district?ip=%s", args[1])
resp, err := http.Get(url)
if err != nil {
fmt.Printf("Error making request: %v\n", err)
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Printf("Error reading response body: %v\n", err)
return
}
var ipInfo IpData
err = json.Unmarshal(body, &ipInfo)
if err != nil {
fmt.Printf("Error parsing JSON: %v\n", err)
return
}
fmt.Printf("Code: %s\n", ipInfo.Code)
fmt.Printf("Ip: %s\n", ipInfo.Ip)
fmt.Printf("Continent: %s\n", ipInfo.Data.Continent)
fmt.Printf("Country: %s\n", ipInfo.Data.Country)
fmt.Printf("ZipCode: %s\n", ipInfo.Data.ZipCode)
fmt.Printf("Owner: %s\n", ipInfo.Data.Owner)
fmt.Printf("Isp: %s\n", ipInfo.Data.Isp)
fmt.Printf("Adcode: %s\n", ipInfo.Data.Adcode)
fmt.Printf("Prov: %s\n", ipInfo.Data.Prov)
fmt.Printf("City: %s\n", ipInfo.Data.City)
fmt.Printf("District: %s\n", ipInfo.Data.District)
}