Files
2026-05-20 16:13:58 +08:00

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
}