From 2326d55f737069eee6a7a6364f8caf008d2ce440 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Tue, 21 Sep 2021 18:14:00 +0800 Subject: [PATCH] Don't crash when proxy is unavailable. --- proxy/proxy.go | 40 ++++++++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/proxy/proxy.go b/proxy/proxy.go index 2a08bf65..0255ea61 100644 --- a/proxy/proxy.go +++ b/proxy/proxy.go @@ -15,8 +15,11 @@ package proxy import ( + "fmt" + "net" "net/http" "strings" + "time" "github.com/astaxie/beego" "golang.org/x/net/proxy" @@ -30,10 +33,34 @@ func InitHttpClient() { DefaultHttpClient = http.DefaultClient // use proxy + ProxyHttpClient = getProxyHttpClient() +} + +func isAddressOpen(address string) bool { + timeout := time.Millisecond * 100 + conn, err := net.DialTimeout("tcp", address, timeout) + if err != nil { + // cannot connect to address, proxy is not active + return false + } + + if conn != nil { + defer conn.Close() + fmt.Printf("Socks5 proxy enabled: %s\n", address) + return true + } + + return false +} + +func getProxyHttpClient() *http.Client { httpProxy := beego.AppConfig.String("httpProxy") if httpProxy == "" { - ProxyHttpClient = DefaultHttpClient - return + return &http.Client{} + } + + if !isAddressOpen(httpProxy) { + return &http.Client{} } // https://stackoverflow.com/questions/33585587/creating-a-go-socks5-client @@ -43,16 +70,9 @@ func InitHttpClient() { } tr := &http.Transport{Dial: dialer.Dial} - ProxyHttpClient = &http.Client{ + return &http.Client{ Transport: tr, } - - //resp, err2 := ProxyHttpClient.Get("https://google.com") - //if err2 != nil { - // panic(err2) - //} - //defer resp.Body.Close() - //println("Response status: %s", resp.Status) } func GetHttpClient(url string) *http.Client {