+ 收藏我们

网站模板

网站模板搜索
404模板 营销型模板 外贸网站模板 单页模板 双语模板 标签大全
电话:18630701785
首页 > 站长学院 > 基于GO的IP地址查询 >

基于GO的IP地址查询

时间:2024-04-12 09:23:30

一、开通接口
免费IP地址查询服务使用聚合数据提供的免费接口,每天可以100次免费调用。可以通过https://www.juhe.cn/docs/api/id/1 注册及开通。

二、使用Go调用接口
package main

import (
    "net/url"
    "fmt"
    "net/Http"
    "io/ioutil"
    "encoding/JSON"
)

func main() {
    // 接口请求URL
    apiUrl := "http://apis.juhe.cn/ip/ipNew"

    // 初始化参数
    param := url.Values{}

    // 配置请求参数,方法内部已处理urlencode问题,中文参数可以直接传参
    param.Set("ip", "58.215.155.153")                    // 需要查询的IP地址
    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",
                    data.(map[string]interface{})["Country"],
                    data.(map[string]interface{})["Province"],
                    data.(map[string]interface{})["City"],
                    data.(map[string]interface{})["Isp"])
            } 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)
}

有问题可以加入网站技术QQ群一起交流学习

本站会员学习、解决问题QQ群(691961965)

客服微信号:lpf010888

pbootcms教程

织梦教程

站长学院

SEO

wordpress

竞价教程

信息流

Title