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 }