Sfoglia il codice sorgente

新增检测本机外网 IP 的函数

Signed-off-by: allan716 <[email protected]>
allan716 3 anni fa
parent
commit
fee3d9a11f

+ 20 - 0
internal/pkg/my_util/util.go

@@ -73,6 +73,26 @@ func NewHttpClient(_proxySettings ...settings.ProxySettings) *resty.Client {
 	return httpClient
 }
 
+func GetPublicIP(queue *settings.TaskQueue, _proxySettings ...settings.ProxySettings) (string, error) {
+
+	var client *resty.Client
+	if len(_proxySettings) > 0 {
+		client = NewHttpClient(_proxySettings[0])
+	} else {
+		client = NewHttpClient()
+	}
+
+	targetSite := "http://myexternalip.com/raw"
+	if queue.CheckPublicIPTargetSite != "" {
+		targetSite = queue.CheckPublicIPTargetSite
+	}
+	response, err := client.R().Get(targetSite)
+	if err != nil {
+		return "", err
+	}
+	return response.String(), err
+}
+
 // DownFile 从指定的 url 下载文件
 func DownFile(l *logrus.Logger, urlStr string, _proxySettings ...settings.ProxySettings) ([]byte, string, error) {
 	var proxySettings settings.ProxySettings

+ 10 - 0
internal/pkg/my_util/util_test.go

@@ -2,6 +2,7 @@ package my_util
 
 import (
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
+	"github.com/allanpk716/ChineseSubFinder/internal/pkg/settings"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/unit_test_helper"
 	"path/filepath"
 	"testing"
@@ -29,3 +30,12 @@ func TestGetRestOfDaySec(t *testing.T) {
 	rest := GetRestOfDaySec()
 	println(rest)
 }
+
+func TestGetPublicIP(t *testing.T) {
+
+	got, err := GetPublicIP(settings.NewTaskQueue())
+	if err != nil {
+		t.Fatal(err)
+	}
+	println(got)
+}

+ 14 - 12
internal/pkg/settings/task_queue.go

@@ -1,21 +1,23 @@
 package settings
 
 type TaskQueue struct {
-	MaxRetryTimes          int `json:"max_retry_times" default:"3"`            // 单个任务失败后,最大重试次数,超过后会降一级
-	OneJobTimeOut          int `json:"one_job_time_out" default:"300"`         // 单个任务的超时时间 5 * 60 s
-	Interval               int `json:"interval" default:"10"`                  // 任务的间隔,单位 s,这里会有一个限制,不允许太快,然后会做一定的随机时间范围,当前值 x ~ 2*x 之内随机
-	ExpirationTime         int `json:"expiration_time"  default:"90"`          // 单位天。1. 一个视频的 CreateTime 在这个时间范围内,都会被下载字幕(除非已经观看跳过启用了)。2. 如果下载失败的任务,AddTime 超过了这个时间,那么就标记为 Failed
-	DownloadSubDuringXDays int `json:"download_sub_during_x_days" default:"7"` // 如果创建了 x 天,且有内置的中文字幕,那么也不进行下载了
-	OneSubDownloadInterval int `json:"one_sub_download_interval" default:"12"` // 一个字幕下载的间隔(单位 h),不然老是一个循环。对比的基准是 OneJob 的 UpdateTime
+	MaxRetryTimes           int    `json:"max_retry_times" default:"3"`                                      // 单个任务失败后,最大重试次数,超过后会降一级
+	OneJobTimeOut           int    `json:"one_job_time_out" default:"300"`                                   // 单个任务的超时时间 5 * 60 s
+	Interval                int    `json:"interval" default:"10"`                                            // 任务的间隔,单位 s,这里会有一个限制,不允许太快,然后会做一定的随机时间范围,当前值 x ~ 2*x 之内随机
+	ExpirationTime          int    `json:"expiration_time"  default:"90"`                                    // 单位天。1. 一个视频的 CreateTime 在这个时间范围内,都会被下载字幕(除非已经观看跳过启用了)。2. 如果下载失败的任务,AddTime 超过了这个时间,那么就标记为 Failed
+	DownloadSubDuringXDays  int    `json:"download_sub_during_x_days" default:"7"`                           // 如果创建了 x 天,且有内置的中文字幕,那么也不进行下载了
+	OneSubDownloadInterval  int    `json:"one_sub_download_interval" default:"12"`                           // 一个字幕下载的间隔(单位 h),不然老是一个循环。对比的基准是 OneJob 的 UpdateTime
+	CheckPublicIPTargetSite string `json:"check_pulic_ip_target_site" default:"http://myexternalip.com/raw"` // 检测本机外网 IP 的目标地址,必须是返回直接的 IP 字符串,不需要解析
 }
 
 func NewTaskQueue() *TaskQueue {
 	return &TaskQueue{
-		MaxRetryTimes:          3,
-		OneJobTimeOut:          300,
-		Interval:               10,
-		ExpirationTime:         90,
-		DownloadSubDuringXDays: 7,
-		OneSubDownloadInterval: 12,
+		MaxRetryTimes:           3,
+		OneJobTimeOut:           300,
+		Interval:                10,
+		ExpirationTime:          90,
+		DownloadSubDuringXDays:  7,
+		OneSubDownloadInterval:  12,
+		CheckPublicIPTargetSite: "http://myexternalip.com/raw",
 	}
 }