瀏覽代碼

增强获取外网IP的逻辑,支持多个 target site

Signed-off-by: 716 <[email protected]>
716 3 年之前
父節點
當前提交
bee610aa4d

+ 2 - 2
internal/logic/file_downloader/downloader_hub.go

@@ -44,7 +44,7 @@ func (f *FileDownloader) Get(supplierName string, topN int64, videoFileName stri
 		}
 		// 下载成功需要统计到今天的次数中
 		_, err = task_queue.AddDailyDownloadCount(supplierName,
-			my_util.GetPublicIP(f.Settings.AdvancedSettings.TaskQueue, f.Settings.AdvancedSettings.ProxySettings))
+			my_util.GetPublicIP(f.Log, f.Settings.AdvancedSettings.TaskQueue, f.Settings.AdvancedSettings.ProxySettings))
 		if err != nil {
 			f.Log.Warningln(supplierName, "FileDownloader.Get.AddDailyDownloadCount", err)
 		}
@@ -87,7 +87,7 @@ func (f *FileDownloader) GetEx(supplierName string, browser *rod.Browser, subDow
 		}
 		// 下载成功需要统计到今天的次数中
 		_, err = task_queue.AddDailyDownloadCount(supplierName,
-			my_util.GetPublicIP(f.Settings.AdvancedSettings.TaskQueue, f.Settings.AdvancedSettings.ProxySettings))
+			my_util.GetPublicIP(f.Log, f.Settings.AdvancedSettings.TaskQueue, f.Settings.AdvancedSettings.ProxySettings))
 		if err != nil {
 			f.Log.Warningln(supplierName, "FileDownloader.GetEx.AddDailyDownloadCount", err)
 		}

+ 1 - 1
internal/logic/sub_supplier/subhd/subhd.go

@@ -92,7 +92,7 @@ func (s *Supplier) OverDailyDownloadLimit() bool {
 
 	// 需要查询今天的限额
 	count, err := task_queue.GetDailyDownloadCount(s.GetSupplierName(),
-		my_util.GetPublicIP(s.settings.AdvancedSettings.TaskQueue, s.settings.AdvancedSettings.ProxySettings))
+		my_util.GetPublicIP(s.log, s.settings.AdvancedSettings.TaskQueue, s.settings.AdvancedSettings.ProxySettings))
 	if err != nil {
 		s.log.Errorln(s.GetSupplierName(), "GetDailyDownloadCount", err)
 		return true

+ 1 - 1
internal/logic/sub_supplier/zimuku/zimuku.go

@@ -100,7 +100,7 @@ func (s *Supplier) OverDailyDownloadLimit() bool {
 
 	// 需要查询今天的限额
 	count, err := task_queue.GetDailyDownloadCount(s.GetSupplierName(),
-		my_util.GetPublicIP(s.settings.AdvancedSettings.TaskQueue, s.settings.AdvancedSettings.ProxySettings))
+		my_util.GetPublicIP(s.log, s.settings.AdvancedSettings.TaskQueue, s.settings.AdvancedSettings.ProxySettings))
 	if err != nil {
 		s.log.Errorln(s.GetSupplierName(), "GetDailyDownloadCount", err)
 		return true

+ 1 - 1
internal/pkg/emby_api/emby_api_test.go

@@ -8,7 +8,7 @@ import (
 var ec = settings.EmbySettings{
 	Enable:                true,
 	AddressUrl:            "http://192.168.50.252:8096",
-	APIKey:                "bc1e3ffe000c4546adbe9ce6945d861c",
+	APIKey:                "123",
 	MaxRequestVideoNumber: 100,
 }
 

+ 1 - 0
internal/pkg/hot_fix/hot_fix_002.go

@@ -2,6 +2,7 @@ package hot_fix
 
 import (
 	"github.com/allanpk716/ChineseSubFinder/internal/dao"
+	"github.com/allanpk716/ChineseSubFinder/internal/models"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
 )
 

+ 31 - 7
internal/pkg/my_util/util.go

@@ -77,19 +77,18 @@ func NewHttpClient(_proxySettings ...*settings.ProxySettings) *resty.Client {
 	return httpClient
 }
 
-func GetPublicIP(queue *settings.TaskQueue, _proxySettings ...*settings.ProxySettings) string {
+func getPublicIP(inputSite string, queue *settings.TaskQueue, _proxySettings ...*settings.ProxySettings) string {
 
 	var client *resty.Client
-	if len(_proxySettings) > 0 {
-		client = NewHttpClient(_proxySettings[0])
-	} else {
-		client = NewHttpClient()
-	}
+	client = NewHttpClient(_proxySettings...)
 
-	targetSite := "http://myexternalip.com/raw"
+	targetSite := ""
 	if queue.CheckPublicIPTargetSite != "" {
 		targetSite = queue.CheckPublicIPTargetSite
+	} else {
+		targetSite = inputSite
 	}
+
 	response, err := client.R().Get(targetSite)
 	if err != nil {
 		return ""
@@ -97,6 +96,31 @@ func GetPublicIP(queue *settings.TaskQueue, _proxySettings ...*settings.ProxySet
 	return response.String()
 }
 
+func GetPublicIP(log *logrus.Logger, queue *settings.TaskQueue, _proxySettings ...*settings.ProxySettings) string {
+
+	publicIPSites := []string{
+		"https://api.ipify.org/",
+		"https://myip.biturl.top/",
+		"https://ip4.seeip.org/",
+		"https://ipecho.net/plain",
+		"https://api-ipv4.ip.sb/ip",
+		"http://myexternalip.com/raw",
+	}
+
+	for i, publicIPSite := range publicIPSites {
+		log.Debugln("[GetPublicIP]", i, publicIPSite)
+		publicIP := getPublicIP(publicIPSite, queue, _proxySettings...)
+
+		matcheds := regex_things.ReMatchIP.FindAllString(publicIP, -1)
+
+		if publicIP != "" || matcheds == nil || len(matcheds) == 0 {
+			return publicIP
+		}
+	}
+
+	return ""
+}
+
 // DownFile 从指定的 url 下载文件
 func DownFile(l *logrus.Logger, urlStr string, _proxySettings ...*settings.ProxySettings) ([]byte, string, error) {
 	var proxySettings *settings.ProxySettings

+ 1 - 1
internal/pkg/my_util/util_test.go

@@ -33,6 +33,6 @@ func TestGetRestOfDaySec(t *testing.T) {
 
 func TestGetPublicIP(t *testing.T) {
 
-	got := GetPublicIP(settings.NewTaskQueue())
+	got := GetPublicIP(log_helper.GetLogger(), settings.NewTaskQueue())
 	println(got)
 }

+ 4 - 0
internal/pkg/regex_things/regex_things.go

@@ -41,5 +41,9 @@ var RegOneSeasonSubFolderNameMatch = regexp.MustCompile(`(?m)^Sub_S\dE0`)
 
 const regStringMathLogOneLine = `(?m)^(\[)(.*)(\])\: (\d{4}-\d{1,2}-\d{1,2} \d{1,2}:\d{1,2}:\d{1,2}) - (.+)`
 
+const regMatchIP = `(?m)((25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))).){3}(25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))`
+
+var ReMatchIP = regexp.MustCompile(regMatchIP)
+
 // 匹配目前日志记录的格式的一行
 var ReMathLogOneLine = regexp.MustCompile(regStringMathLogOneLine)