Initial commit
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user