Преглед на файлове

新增代理检测模块,程序启动的时候会去 check 代理是否正常

Signed-off-by: allan716 <[email protected]>
allan716 преди 4 години
родител
ревизия
d07a791a8b

+ 8 - 0
cmd/chinesesubfinder/main.go

@@ -6,6 +6,7 @@ import (
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/hot_fix"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/notify_center"
+	"github.com/allanpk716/ChineseSubFinder/internal/pkg/proxy_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/rod_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/sub_formatter"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/sub_formatter/common"
@@ -45,6 +46,13 @@ func main() {
 		log.Infoln("UseProxy = false")
 	} else {
 		log.Infoln("UseProxy:", httpProxy)
+		proxySpeed, proxyStatus, err := proxy_helper.ProxyTest(httpProxy)
+		if err != nil {
+			log.Errorln("ProxyTest Target Site http://google.com", err)
+			return
+		} else {
+			log.Infoln("ProxyTest Target Site http://google.com", "Speed:", proxySpeed, "Status:", proxyStatus)
+		}
 	}
 
 	// 判断文件夹是否存在

+ 1 - 1
internal/logic/series_helper/seriesHelper_test.go

@@ -9,7 +9,7 @@ func TestReadSeriesInfoFromDir(t *testing.T) {
 	series := "X:\\连续剧\\杀死伊芙 (2018)"
 	//series := "X:\\连续剧\\Money.Heist"
 
-	seriesInfo, err := ReadSeriesInfoFromDir(series, nil)
+	seriesInfo, err := ReadSeriesInfoFromDir(series, nil, false)
 	if err != nil {
 		t.Fatal(err)
 	}

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

@@ -42,7 +42,7 @@ func TestSupplier_GetSubListFromFile4Series(t *testing.T) {
 	//ser := "X:\\连续剧\\黑钱胜地 (2017)"
 
 	// 读取本地的视频和字幕信息
-	seriesInfo, err := series_helper2.ReadSeriesInfoFromDir(ser, nil)
+	seriesInfo, err := series_helper2.ReadSeriesInfoFromDir(ser, nil, false)
 	if err != nil {
 		t.Fatal(err)
 	}

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

@@ -46,7 +46,7 @@ func TestSupplier_GetSubListFromFile4Series(t *testing.T) {
 	//ser := "X:\\连续剧\\Money.Heist"
 
 	// 读取本地的视频和字幕信息
-	seriesInfo, err := series_helper2.ReadSeriesInfoFromDir(ser, nil)
+	seriesInfo, err := series_helper2.ReadSeriesInfoFromDir(ser, nil, false)
 	if err != nil {
 		t.Fatal(err)
 	}

+ 48 - 0
internal/pkg/proxy_helper/proxy_helper.go

@@ -0,0 +1,48 @@
+package proxy_helper
+
+import (
+	"errors"
+	"net/http"
+	"net/url"
+	"regexp"
+	"time"
+)
+
+func ProxyTest(proxyAddr string) (Speed int, Status int, err error) {
+	// 首先检测 proxyAddr 是否合法,必须是 http 的代理,不支持 https 代理
+	re := regexp.MustCompile(`(http):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?`)
+	result := re.FindAllStringSubmatch(proxyAddr, -1)
+	if result == nil {
+		err = errors.New("proxy address illegal, only support http://xx:xx")
+		return 0, 0, err
+	}
+	// 检测代理iP访问地址
+	var testUrl string
+	testUrl = "http://google.com"
+	// 解析代理地址
+	proxy, err := url.Parse(proxyAddr)
+	// 设置网络传输
+	netTransport := &http.Transport{
+		Proxy:                 http.ProxyURL(proxy),
+		MaxIdleConnsPerHost:   10,
+		ResponseHeaderTimeout: time.Second * time.Duration(5),
+	}
+	// 创建连接客户端
+	httpClient := &http.Client{
+		Timeout:   time.Second * 10,
+		Transport: netTransport,
+	}
+	begin := time.Now() //判断代理访问时间
+	// 使用代理IP访问测试地址
+	res, err := httpClient.Get(testUrl)
+	if err != nil {
+		return
+	}
+	defer res.Body.Close()
+	speed := int(time.Now().Sub(begin).Nanoseconds() / 1000 / 1000) //ms
+	// 判断是否成功访问,如果成功访问StatusCode应该为200
+	if res.StatusCode != http.StatusOK {
+		return
+	}
+	return speed, res.StatusCode, nil
+}

+ 22 - 0
internal/pkg/proxy_helper/proxy_helper_test.go

@@ -0,0 +1,22 @@
+package proxy_helper
+
+import "testing"
+
+func TestProxyTest(t *testing.T) {
+
+	gotSpeed, gotStatus, err := ProxyTest("http://192.168.50.252:20172")
+	if err != nil {
+		t.Fatal(err)
+	}
+	println("Speed:", gotSpeed, "Status:", gotStatus)
+
+	_, _, err = ProxyTest("http:/192.168.1.123:123")
+	if err == nil {
+		t.Fatal(err)
+	}
+
+	_, _, err = ProxyTest("http://192.168.1.123:123")
+	if err == nil {
+		t.Fatal(err)
+	}
+}