添加ip服务
This commit is contained in:
		
							parent
							
								
									10283347b6
								
							
						
					
					
						commit
						156ea6409c
					
				
							
								
								
									
										71
									
								
								sdk/requests/json_request.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								sdk/requests/json_request.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,71 @@
 | 
			
		||||
package requests
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"golib.gaore.com/GaoreGo/haiwai-common-sdk-go/sdk/utils"
 | 
			
		||||
	"io"
 | 
			
		||||
	"strings"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type JsonRequest struct {
 | 
			
		||||
	*baseRequest
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (request *JsonRequest) init() {
 | 
			
		||||
	request.baseRequest = defaultBaseRequest()
 | 
			
		||||
	request.baseRequest.AddHeaderParam("Content-Type", Json)
 | 
			
		||||
	request.Method = POST
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (request *JsonRequest) BuildUrl() string {
 | 
			
		||||
 | 
			
		||||
	var hostname string
 | 
			
		||||
	if request.Domain.Func == nil {
 | 
			
		||||
		hostname = request.Domain.Default
 | 
			
		||||
	} else if hostname = request.Domain.Func(request.GetEnv(), request.GetArea()); hostname == "" {
 | 
			
		||||
		hostname = request.Domain.Default
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	url := fmt.Sprintf("%s://%s", strings.ToLower(request.Scheme), hostname)
 | 
			
		||||
	if len(request.Port) > 0 {
 | 
			
		||||
		url = fmt.Sprintf("%s:%s", url, request.Port)
 | 
			
		||||
	}
 | 
			
		||||
	return url + request.BuildQueries()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (request *JsonRequest) GetStyle() string {
 | 
			
		||||
	return STREAM
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (request *JsonRequest) BuildQueries() string {
 | 
			
		||||
	path := strings.TrimLeft(strings.TrimSpace(request.GetActionName()), "/")
 | 
			
		||||
	mod := "&"
 | 
			
		||||
	if !strings.Contains(path, "?") {
 | 
			
		||||
		mod = "?"
 | 
			
		||||
	}
 | 
			
		||||
	request.queries = "/" + path + mod + utils.GetUrlFormedMap(request.QueryParams)
 | 
			
		||||
	return request.queries
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (request *JsonRequest) GetActionName() string {
 | 
			
		||||
	return request.actionName
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (request *JsonRequest) InitWithApiInfo(domain Host, version, urlPath string) {
 | 
			
		||||
	request.init()
 | 
			
		||||
	request.SetDomain(domain)
 | 
			
		||||
	request.version = version
 | 
			
		||||
	request.actionName = urlPath
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (request *JsonRequest) GetBodyReader() io.Reader {
 | 
			
		||||
	if request.JsonParams != nil && len(request.JsonParams) > 0 {
 | 
			
		||||
		body, err := json.Marshal(request.JsonParams)
 | 
			
		||||
		if err == nil {
 | 
			
		||||
			return bytes.NewReader(body)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return strings.NewReader("")
 | 
			
		||||
}
 | 
			
		||||
@ -12,8 +12,9 @@ import (
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	RPC = "RPC"
 | 
			
		||||
	ROA = "ROA"
 | 
			
		||||
	RPC    = "RPC"
 | 
			
		||||
	ROA    = "ROA"
 | 
			
		||||
	STREAM = "STREAM"
 | 
			
		||||
 | 
			
		||||
	HTTP  = "HTTP"
 | 
			
		||||
	HTTPS = "HTTPS"
 | 
			
		||||
@ -36,10 +37,11 @@ const (
 | 
			
		||||
	Raw  = "application/octet-stream"
 | 
			
		||||
	Form = "application/x-www-form-urlencoded"
 | 
			
		||||
 | 
			
		||||
	Header = "Header"
 | 
			
		||||
	Query  = "Query"
 | 
			
		||||
	Body   = "Body"
 | 
			
		||||
	Path   = "Path"
 | 
			
		||||
	Header   = "Header"
 | 
			
		||||
	Query    = "Query"
 | 
			
		||||
	Body     = "Body"
 | 
			
		||||
	BodyJson = "Json"
 | 
			
		||||
	Path     = "Path"
 | 
			
		||||
 | 
			
		||||
	TEST    = "TEST"
 | 
			
		||||
	PRE     = "PRE"
 | 
			
		||||
@ -96,6 +98,7 @@ type AcsRequest interface {
 | 
			
		||||
	AddHeaderParam(key, value string)
 | 
			
		||||
	addQueryParam(key, value string)
 | 
			
		||||
	addFormParam(key, value string)
 | 
			
		||||
	addJsonParam(string, interface{})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type baseRequest struct {
 | 
			
		||||
@ -119,6 +122,7 @@ type baseRequest struct {
 | 
			
		||||
	QueryParams map[string]string
 | 
			
		||||
	Headers     map[string]string
 | 
			
		||||
	FormParams  map[string]string
 | 
			
		||||
	JsonParams  map[string]interface{}
 | 
			
		||||
	Content     []byte
 | 
			
		||||
 | 
			
		||||
	queries      string
 | 
			
		||||
@ -240,6 +244,10 @@ func (request *baseRequest) addFormParam(key, val string) {
 | 
			
		||||
	request.FormParams[key] = val
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (request *baseRequest) addJsonParam(key string, val interface{}) {
 | 
			
		||||
	request.JsonParams[key] = val
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func defaultBaseRequest() (request *baseRequest) {
 | 
			
		||||
	request = &baseRequest{
 | 
			
		||||
		Scheme:       HTTP,
 | 
			
		||||
@ -252,6 +260,7 @@ func defaultBaseRequest() (request *baseRequest) {
 | 
			
		||||
			"Accept-Encoding":    Json,
 | 
			
		||||
		},
 | 
			
		||||
		FormParams: make(map[string]string),
 | 
			
		||||
		JsonParams: make(map[string]interface{}),
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
@ -300,14 +309,14 @@ func flatRepeatedList(reflectValue reflect.Value, request AcsRequest, position s
 | 
			
		||||
				value = fieldDefault
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			err = addParam(request, fieldPosition, name, value)
 | 
			
		||||
			err = addParam(request, fieldPosition, name, value, reflectValue.Field(i).Interface())
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func addParam(request AcsRequest, position, key, value string) (err error) {
 | 
			
		||||
func addParam(request AcsRequest, position, key, value string, vAny interface{}) (err error) {
 | 
			
		||||
	if len(value) > 0 {
 | 
			
		||||
		switch position {
 | 
			
		||||
		case Header:
 | 
			
		||||
@ -316,6 +325,8 @@ func addParam(request AcsRequest, position, key, value string) (err error) {
 | 
			
		||||
			request.addQueryParam(key, value)
 | 
			
		||||
		case Body:
 | 
			
		||||
			request.addFormParam(key, value)
 | 
			
		||||
		case BodyJson:
 | 
			
		||||
			request.addJsonParam(key, vAny)
 | 
			
		||||
		default:
 | 
			
		||||
			errmsg := fmt.Sprintf("unsupport positions add param `%s`", position)
 | 
			
		||||
			err = errors.New(errmsg)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										44
									
								
								services/ip/client.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								services/ip/client.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,44 @@
 | 
			
		||||
package ip
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"golib.gaore.com/GaoreGo/haiwai-common-sdk-go/sdk"
 | 
			
		||||
	"golib.gaore.com/GaoreGo/haiwai-common-sdk-go/sdk/requests"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	VERSION = "2025-06-24"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var HOST = requests.Host{
 | 
			
		||||
	Default: "ip.gaore.com",
 | 
			
		||||
	Func: func(s string, area string) string {
 | 
			
		||||
		if area != "" {
 | 
			
		||||
			fmt.Println("ip.gaore.com." + area)
 | 
			
		||||
			return "ip.gaore.com." + area
 | 
			
		||||
		}
 | 
			
		||||
		return "ip.gaore.com.hk"
 | 
			
		||||
	},
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type Client struct {
 | 
			
		||||
	sdk.Client
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewClient(area string, env ...string) (client *Client, err error) {
 | 
			
		||||
	client = new(Client)
 | 
			
		||||
	err = client.InitWithArea(area, env...)
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (client *Client) CreateGetIpRequest(req *IpRequest) (resp *IpResponse, err error) {
 | 
			
		||||
	resp = CreateIpResponse()
 | 
			
		||||
	err = client.DoAction(req, resp)
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (client *Client) CreateGetIpsRequest(req *IpsRequest) (resp *IpsResponse, err error) {
 | 
			
		||||
	resp = CreateIpsResponse()
 | 
			
		||||
	err = client.DoAction(req, resp)
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										48
									
								
								services/ip/client_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								services/ip/client_test.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,48 @@
 | 
			
		||||
package ip
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"testing"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// 测试获取单个ip地区信息
 | 
			
		||||
func TestGetIp(t *testing.T) {
 | 
			
		||||
	client, newErr := NewClient("hk")
 | 
			
		||||
	if newErr != nil {
 | 
			
		||||
		panic(newErr)
 | 
			
		||||
	}
 | 
			
		||||
	req := CreateIpRequest(IpParam{
 | 
			
		||||
		Ip: "114.234.202.136",
 | 
			
		||||
	})
 | 
			
		||||
	res, doErr := client.CreateGetIpRequest(req)
 | 
			
		||||
	if doErr != nil {
 | 
			
		||||
		panic(doErr)
 | 
			
		||||
	}
 | 
			
		||||
	if res.Code != 0 {
 | 
			
		||||
		t.Error("查询多个ip失败")
 | 
			
		||||
	}
 | 
			
		||||
	fmt.Printf(fmt.Sprintf("%v", res))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 测试获取多个ip地区信息
 | 
			
		||||
func TestGetIps(t *testing.T) {
 | 
			
		||||
	client, newErr := NewClient("hk")
 | 
			
		||||
	if newErr != nil {
 | 
			
		||||
		panic(newErr)
 | 
			
		||||
	}
 | 
			
		||||
	req := CreateIpsRequest(IpsParam{
 | 
			
		||||
		Ips: []string{
 | 
			
		||||
			"2001:ee0:5208:e600:4c51:3189:28a4:b668",
 | 
			
		||||
			"114.234.202.136",
 | 
			
		||||
		},
 | 
			
		||||
	})
 | 
			
		||||
	res, err := client.CreateGetIpsRequest(req)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Error(err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	if res.Code != 0 {
 | 
			
		||||
		t.Error("查询多个ip失败")
 | 
			
		||||
	}
 | 
			
		||||
	fmt.Printf(fmt.Sprintf("%v", res))
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										100
									
								
								services/ip/ip.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								services/ip/ip.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,100 @@
 | 
			
		||||
package ip
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"golib.gaore.com/GaoreGo/haiwai-common-sdk-go/sdk/requests"
 | 
			
		||||
	"golib.gaore.com/GaoreGo/haiwai-common-sdk-go/sdk/responses"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type IpInfo struct {
 | 
			
		||||
	Ip        string `json:"ip"`
 | 
			
		||||
	City      string `json:"city"`
 | 
			
		||||
	Province  string `json:"province"`
 | 
			
		||||
	Country   string `json:"country"`
 | 
			
		||||
	Isp       string `json:"isp"`
 | 
			
		||||
	Owner     string `json:"owner"`
 | 
			
		||||
	Continent string `json:"continent"`
 | 
			
		||||
	Accuracy  string `json:"accuracy"`
 | 
			
		||||
	Adcode    string `json:"adcode"`
 | 
			
		||||
	Areacode  string `json:"areacode"`
 | 
			
		||||
	Asnumber  string `json:"asnumber"`
 | 
			
		||||
	Radius    string `json:"radius"`
 | 
			
		||||
	Latwgs    string `json:"latwgs"`
 | 
			
		||||
	Lngwgs    string `json:"lngwgs"`
 | 
			
		||||
	Source    string `json:"source"`
 | 
			
		||||
	Timezone  string `json:"timezone"`
 | 
			
		||||
	Zipcode   string `json:"zipcode"`
 | 
			
		||||
	District  string `json:"district"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IpsParam
 | 
			
		||||
// 单个ip请求参数
 | 
			
		||||
type IpParam struct {
 | 
			
		||||
	Ip string `json:"ip"`
 | 
			
		||||
}
 | 
			
		||||
type IpRequest struct {
 | 
			
		||||
	*requests.JsonRequest
 | 
			
		||||
	Ip string `position:"Json" field:"ip"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IpResponse
 | 
			
		||||
// 单个ip返回参数
 | 
			
		||||
type IpResponse struct {
 | 
			
		||||
	*responses.BaseResponse
 | 
			
		||||
	Code int    `json:"code"`
 | 
			
		||||
	Msg  string `json:"msg"`
 | 
			
		||||
	Data IpInfo `json:"data"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CreateIpRequest
 | 
			
		||||
// 同时支持ipv4、ipv6格式查询
 | 
			
		||||
func CreateIpRequest(param IpParam) (req *IpRequest) {
 | 
			
		||||
	req = &IpRequest{
 | 
			
		||||
		JsonRequest: &requests.JsonRequest{},
 | 
			
		||||
		Ip:          param.Ip,
 | 
			
		||||
	}
 | 
			
		||||
	req.InitWithApiInfo(HOST, VERSION, "/v1/getIp")
 | 
			
		||||
	req.Method = requests.POST
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
func CreateIpResponse() (resp *IpResponse) {
 | 
			
		||||
	resp = &IpResponse{
 | 
			
		||||
		BaseResponse: &responses.BaseResponse{},
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 多个ip请求参数
 | 
			
		||||
type IpsParam struct {
 | 
			
		||||
	Ips []string `json:"ips"`
 | 
			
		||||
}
 | 
			
		||||
type IpsRequest struct {
 | 
			
		||||
	*requests.JsonRequest
 | 
			
		||||
	Ips []string `position:"Json" field:"ips"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IpsResponse
 | 
			
		||||
// 多个ip返回参数
 | 
			
		||||
type IpsResponse struct {
 | 
			
		||||
	*responses.BaseResponse
 | 
			
		||||
	Code int               `json:"code"`
 | 
			
		||||
	Msg  string            `json:"msg"`
 | 
			
		||||
	Data map[string]IpInfo `json:"data"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CreateIpsRequest
 | 
			
		||||
// 同时支持ipv4、ipv6格式查询
 | 
			
		||||
func CreateIpsRequest(param IpsParam) (req *IpsRequest) {
 | 
			
		||||
	req = &IpsRequest{
 | 
			
		||||
		JsonRequest: &requests.JsonRequest{},
 | 
			
		||||
		Ips:         param.Ips,
 | 
			
		||||
	}
 | 
			
		||||
	req.InitWithApiInfo(HOST, VERSION, "/v1/getIps")
 | 
			
		||||
	req.Method = requests.POST
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
func CreateIpsResponse() (resp *IpsResponse) {
 | 
			
		||||
	resp = &IpsResponse{
 | 
			
		||||
		BaseResponse: &responses.BaseResponse{},
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user