diff --git a/proxy/time.go b/proxy/time.go new file mode 100644 index 0000000..c3b52f4 --- /dev/null +++ b/proxy/time.go @@ -0,0 +1,94 @@ +package main + +import ( + "crypto/tls" + "fmt" + "io" + "net/http" + "regexp" + "strconv" + "time" +) + +// 定义过期时间 +const ExpireDate = "2025-07-31 23:59:59" + +// GetBeijingTimeFromTraceURLs 从trace URL获取北京时间 +func GetBeijingTimeFromTraceURLs(urls []string, timeout time.Duration) (*time.Time, error) { + beijingLocation, _ := time.LoadLocation("Asia/Shanghai") + pattern := regexp.MustCompile(`ts=(\d+)`) + + client := &http.Client{ + Timeout: timeout, + Transport: &http.Transport{ + TLSClientConfig: &tls.Config{InsecureSkipVerify: false}, + }, + } + + for _, url := range urls { + resp, err := client.Get(url) + if err != nil { + continue + } + + if resp.StatusCode != 200 { + resp.Body.Close() + continue + } + + body, err := io.ReadAll(resp.Body) + resp.Body.Close() + if err != nil { + continue + } + + match := pattern.FindStringSubmatch(string(body)) + if len(match) < 2 { + continue + } + + timestamp, err := strconv.ParseInt(match[1], 10, 64) + if err != nil { + continue + } + + utcTime := time.Unix(timestamp, 0).UTC() + beijingTime := utcTime.In(beijingLocation) + return &beijingTime, nil + } + + return nil, fmt.Errorf("所有时间接口请求失败") +} + +// CheckExpiration 检查是否过期 +func CheckExpiration(urls []string) error { + beijingTime, err := GetBeijingTimeFromTraceURLs(urls, 5*time.Second) + if err != nil { + return fmt.Errorf("获取时间失败: %v", err) + } + + beijingLocation, _ := time.LoadLocation("Asia/Shanghai") + expireTime, err := time.ParseInLocation("2006-01-02 15:04:05", ExpireDate, beijingLocation) + if err != nil { + return fmt.Errorf("解析过期时间失败: %v", err) + } + + if beijingTime.After(expireTime) { + return fmt.Errorf("当前项目已过期") + } + + fmt.Printf("当前北京时间: %s,未过期\n", beijingTime.Format("2006-01-02 15:04:05")) + return nil +} + +// 调用方法 +func main() { + urls := []string{ + "https://www.cloudflare.com/cdn-cgi/trace", + "https://www.visa.cn/cdn-cgi/trace", + } + + if err := CheckExpiration(urls); err != nil { + fmt.Printf("错误: %v\n", err) + } +}