qqwry/server/server.go

48 lines
901 B
Go

package main
import (
"encoding/json"
"flag"
"github.com/xiaoqidun/qqwry"
"github.com/xiaoqidun/qqwry/assets"
"net"
"net/http"
)
type resp struct {
IP string `json:"ip"`
Err string `json:"err"`
City string `json:"city"`
Isp string `json:"isp"`
}
func init() {
qqwry.LoadData(assets.QQWryDat)
}
func main() {
listen := flag.String("listen", "127.0.0.1:80", "http server listen addr")
flag.Parse()
http.HandleFunc("/ip/", IpAPI)
if err := http.ListenAndServe(*listen, nil); err != nil {
panic(err)
}
}
func IpAPI(writer http.ResponseWriter, request *http.Request) {
ip := request.URL.Path[4:]
if ip == "" {
ip, _, _ = net.SplitHostPort(request.RemoteAddr)
}
rw := &resp{IP: ip}
city, isp, err := qqwry.QueryIP(ip)
if err != nil {
rw.Err = err.Error()
} else {
rw.City = city
rw.Isp = isp
}
b, _ := json.MarshalIndent(rw, "", " ")
_, _ = writer.Write(b)
}