package main import ( "net/url" "fmt" "net/http" "io/ioutil" "encoding/json" ) func main() { // 接口请求URL apiUrl := "http://apis.juhe.cn/mobile/get" // 初始化参数 param := url.Values{} // 配置请求参数,方法内部已处理urlencode问题,中文参数可以直接传参 param.Set("phone", "18912341234") // 需要查询的手机号码或手机号码前7位 param.Set("key", "您申请的请求Key") // 接口请求Key // 发送请求 data, err := Get(apiUrl, param) if err != nil { // 请求异常,根据自身业务逻辑进行调整修改 fmt.Errorf("请求异常:\r\n%v", err) } else { var netReturn map[string]interface{} jsonerr := json.Unmarshal(data, &netReturn) if jsonerr != nil { // 解析JSON异常,根据自身业务逻辑进行调整修改 fmt.Errorf("请求异常:%v", jsonerr) } else { errorCode := netReturn["error_code"] reason := netReturn["reason"] data := netReturn["result"] if errorCode.(float64) == 0 { // 查询成功,根据自身业务逻辑进行调整修改 fmt.Printf("查询结果\n省份:%v\n城市:%v\n区号:%v\n邮编:%v\n运营商:%v\n", data.(map[string]interface{})["province"], data.(map[string]interface{})["city"], data.(map[string]interface{})["areacode"], data.(map[string]interface{})["zip"], data.(map[string]interface{})["company"]) } else { // 查询失败,根据自身业务逻辑进行调整修改 fmt.Printf("查询失败:%v_%v", errorCode.(float64), reason) } } } } // get 方式发起网络请求 func Get(apiURL string, params url.Values) (rs []byte, err error) { var Url *url.URL Url, err = url.Parse(apiURL) if err != nil { fmt.Printf("解析url错误:\r\n%v", err) return nil, err } //如果参数中有中文参数,这个方法会进行URLEncode Url.RawQuery = params.Encode() resp, err := http.Get(Url.String()) if err != nil { fmt.Println("err:", err) return nil, err } defer resp.Body.Close() return ioutil.ReadAll(resp.Body) } // post 方式发起网络请求 ,params 是url.Values类型 func Post(apiURL string, params url.Values) (rs []byte, err error) { resp, err := http.PostForm(apiURL, params) if err != nil { return nil, err } defer resp.Body.Close() return ioutil.ReadAll(resp.Body) } 复制代码