forked from all_user/stat_center
96 lines
2.4 KiB
Go
96 lines
2.4 KiB
Go
package domainser
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"net"
|
|
"net/http"
|
|
"net/url"
|
|
"regexp"
|
|
"strings"
|
|
|
|
"github.com/ddliu/go-httpclient"
|
|
)
|
|
|
|
func ParseDomain(name string) (string, error) {
|
|
name = strings.TrimSpace(name)
|
|
if strings.Contains(strings.ToLower(name), "http:") || strings.Contains(strings.ToLower(name), "https:") {
|
|
u, err := url.Parse(name)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
if u.Host == "" {
|
|
return "", fmt.Errorf("没有检测到有效的域名")
|
|
}
|
|
if net.ParseIP(u.Host) != nil {
|
|
return "", fmt.Errorf("只能填写域名,不能填写IP地址")
|
|
}
|
|
host, _, err := net.SplitHostPort(u.Host)
|
|
if err != nil {
|
|
return "", fmt.Errorf("域名无效")
|
|
}
|
|
return host, nil
|
|
} else {
|
|
re, err := regexp.Compile(`^(?:[_a-z0-9](?:[_a-z0-9-]{0,61}[a-z0-9])?\.)+(?:[a-z](?:[a-z0-9-]{0,61}[a-z0-9])?)?$`)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
if !re.MatchString(name) {
|
|
return "", fmt.Errorf("请输入正确的域名")
|
|
}
|
|
return name, nil
|
|
}
|
|
}
|
|
|
|
func (n *ApiPath) GetCreateUrl(param url.Values) (string, error) {
|
|
param.Set("key", ApiKey)
|
|
if n.NeedCreate {
|
|
base, err := url.Parse(ApiDomain + n.Create)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
base.RawQuery = param.Encode()
|
|
return base.String(), nil
|
|
} else {
|
|
return "", fmt.Errorf("do not need create url")
|
|
}
|
|
}
|
|
|
|
func (n *ApiPath) GetQueryUrlWithTaskId(taskId string, param url.Values) (string, error) {
|
|
param.Set("key", ApiKey)
|
|
base, err := url.Parse(ApiDomain + n.Query + taskId)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
base.RawQuery = param.Encode()
|
|
return base.String(), nil
|
|
}
|
|
|
|
func (n *ApiPath) GetQueryUrl(param url.Values) (string, error) {
|
|
param.Set("key", ApiKey)
|
|
base, err := url.Parse(ApiDomain + n.Query)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
base.RawQuery = param.Encode()
|
|
return base.String(), nil
|
|
}
|
|
|
|
func Get(url string, resp interface{}, param url.Values) error {
|
|
res, err := httpclient.Get(url, param)
|
|
if err != nil {
|
|
return fmt.Errorf("访问检测网站失败:%s", err.Error())
|
|
}
|
|
if res.StatusCode != http.StatusOK {
|
|
return fmt.Errorf("访问检测网站失败, HTTP Code:%d, Error:%s", res.StatusCode, res.Status)
|
|
}
|
|
data, err := res.ReadAll()
|
|
if err != nil {
|
|
return fmt.Errorf("读取检测网站返回数据失败:%s", err.Error())
|
|
}
|
|
if err = json.Unmarshal(data, resp); err != nil {
|
|
return fmt.Errorf("解码检测网站返回数据失败:%s", err.Error())
|
|
}
|
|
return nil
|
|
}
|