Files
shell/proxy/time.go
2025-07-28 11:09:46 +08:00

95 lines
2.0 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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)
}
}