github.com/iikira/iikira-go-utils@v0.0.0-20230610031953-f2cb11cde33a/utils/getip/getip_netease.go (about)

     1  package getip
     2  
     3  import (
     4  	"github.com/iikira/iikira-go-utils/requester"
     5  	"github.com/iikira/iikira-go-utils/utils/jsonhelper"
     6  	"net"
     7  	"net/http"
     8  )
     9  
    10  type (
    11  	// IPResNetease 网易服务器获取ip返回的结果
    12  	IPResNetease struct {
    13  		Result  string `json:"result"`
    14  		Code    int    `json:"code"`
    15  		Message string `json:"message"`
    16  	}
    17  )
    18  
    19  func IPInfoFromNeteaseByClient(c *requester.HTTPClient) (ipAddr string, err error) {
    20  	resp, err := c.Req(http.MethodGet, "http://mam.netease.com/api/config/getClientIp", nil, nil)
    21  	if resp != nil {
    22  		defer resp.Body.Close()
    23  	}
    24  	if err != nil {
    25  		return
    26  	}
    27  
    28  	res := &IPResNetease{}
    29  	err = jsonhelper.UnmarshalData(resp.Body, res)
    30  	if err != nil {
    31  		return
    32  	}
    33  
    34  	ip := net.ParseIP(res.Result)
    35  	if ip == nil {
    36  		err = ErrParseIP
    37  		return
    38  	}
    39  
    40  	ipAddr = res.Result
    41  	return
    42  }
    43  
    44  // IPInfoFromNetease 从网易服务器获取ip
    45  func IPInfoFromNetease() (ipAddr string, err error) {
    46  	c := requester.NewHTTPClient()
    47  	return IPInfoFromNeteaseByClient(c)
    48  }