Go语言GIN框架实现网站访客统计

代码在https://github.com/zhi-re/getVisits

这里记录下踩得坑

获取真实ip:

ip :=c.Request.RemoteAddr // 如果是这种方式获取不到真实ip (c *gin.Context)
ip := c.ClientIP() // 获取真实ip

字符串截取:

// cut := strings.Index(ip, ":")
    // ipNoPort := ip[0:cut]

http接口调用以及返回json处理

{
    "error_code": 0,
    "reason": "成功",
    "result": {
        "ip": "115.183.152.152",
        "country": "中国",
        "province": "北京",
        "city": "北京",
        "district": null,
        "isp": "鹏博士"
    }
}
// result内容的获取
result, _ := http.Get("http://apis.haoservice.com/lifeservice/QueryIpAddr/query?ip=" + ip + "&key=XXXXXX");
        body, _ := ioutil.ReadAll(result.Body)
        fmt.Println("接口返回信息:", string(body))
        // 接口返回信息转map
        var resultMap map[string]interface{} // 创建集合
        resultMap = make(map[string]interface{})
        err := json.Unmarshal([]byte(body), &resultMap)
        if err != nil {
            fmt.Println(err)
        }
        // 获取result
        infoMap := resultMap["result"].(map[string]interface{})
        fmt.Println("国家:", infoMap["country"])
        fmt.Println("省份:", infoMap["province"])
        fmt.Println("城市:", infoMap["city"])
        fmt.Println("服务商:", infoMap["isp"])
        var country string
        var province string
        var city string
        var isp string
        var address string
        if infoMap["country"] != nil {
        // (map[string]interface{})类型强制string
            country = infoMap["country"].(string)
        }
    

数据库操作api

// 查询单个数据
err := Db.Get(userData, "select * from info where visitdate = ?", date) 
// 查询结果集
rows, err := Db.Query("select * from info where visitdate = ?", date)

nginx的配置

https的网站无法调用http的接口,这里用了下反向代理

location / {
        proxy_set_header X-Forward-For $remote_addr; # 配置获取真实IP
        proxy_set_header X-real-ip $remote_addr; # 配置获取真实IP
        proxy_pass   http://127.0.0.1:8887; #反向代理
        root /home/gowork;
        index  index.html index.htm;
        }
最后修改:2020 年 05 月 29 日 10 : 22 AM