diff --git a/utils/gohttp/gohttp.go b/utils/gohttp/gohttp.go new file mode 100644 index 00000000..fe21cfab --- /dev/null +++ b/utils/gohttp/gohttp.go @@ -0,0 +1,140 @@ +package gohttp + +import ( + "bytes" + "encoding/json" + "errors" + "fmt" + "io/ioutil" + "net/http" + "net/url" + "strconv" + "strings" + + "github.com/dtapps/go-library/utils/request" +) + +type Response struct { + Status string + StatusCode int + Header map[string][]string + Body []byte + ContentLength int64 +} + +func Get(url string, params map[string]interface{}) (httpResponse Response, err error) { + // 创建 http 客户端 + client := &http.Client{} + // 创建请求 + req, _ := http.NewRequest(http.MethodGet, url, nil) + if len(params) > 0 { + // GET 请求携带查询参数 + q := req.URL.Query() + for k, v := range params { + q.Add(k, getString(v)) + } + req.URL.RawQuery = q.Encode() + } + // 设置请求头 + req.Header.Set("User-Agent", request.GetRandomUserAgent()) + // 发送请求 + resp, err := client.Do(req) + if err != nil { + // 格式化返回错误 + return httpResponse, errors.New(fmt.Sprintf("请求出错 %s", err)) + } + // 最后关闭连接 + defer resp.Body.Close() + // 读取内容 + respBody, err := ioutil.ReadAll(resp.Body) + if err != nil { + return httpResponse, errors.New(fmt.Sprintf("解析内容出错 %s", err)) + } + httpResponse.Status = resp.Status + httpResponse.StatusCode = resp.StatusCode + httpResponse.Header = resp.Header + httpResponse.Body = respBody + httpResponse.ContentLength = resp.ContentLength + return httpResponse, err +} + +func PostForm(targetUrl string, params map[string]interface{}) (httpResponse Response, err error) { + // 创建 http 客户端 + client := &http.Client{} + // 携带 form 参数 + form := url.Values{} + if len(params) > 0 { + for k, v := range params { + form.Add(k, getString(v)) + } + } + // 创建请求 + req, _ := http.NewRequest(http.MethodPost, targetUrl, strings.NewReader(form.Encode())) + // 设置请求头 + req.Header.Set("User-Agent", request.GetRandomUserAgent()) + req.Header.Set("Content-Type", "application/x-www-form-urlencoded") + // 发送请求 + resp, err := client.Do(req) + if err != nil { + // 格式化返回错误 + return httpResponse, errors.New(fmt.Sprintf("请求出错 %s", err)) + } + // 最后关闭连接 + defer resp.Body.Close() + // 读取内容 + respBody, err := ioutil.ReadAll(resp.Body) + if err != nil { + return httpResponse, errors.New(fmt.Sprintf("解析内容出错 %s", err)) + } + httpResponse.Status = resp.Status + httpResponse.StatusCode = resp.StatusCode + httpResponse.Header = resp.Header + httpResponse.Body = respBody + httpResponse.ContentLength = resp.ContentLength + return httpResponse, err +} + +func PostJson(targetUrl string, paramsStr []byte) (httpResponse Response, err error) { + // 创建请求 + req, _ := http.NewRequest(http.MethodPost, targetUrl, bytes.NewBuffer(paramsStr)) + // 设置请求头 + req.Header.Set("User-Agent", request.GetRandomUserAgent()) + req.Header.Set("Content-Type", "application/json") + // 创建 http 客户端 + client := &http.Client{} + // 发送请求 + resp, err := client.Do(req) + if err != nil { + // 格式化返回错误 + return httpResponse, errors.New(fmt.Sprintf("请求出错 %s", err)) + } + // 最后关闭连接 + defer resp.Body.Close() + // 读取内容 + respBody, err := ioutil.ReadAll(resp.Body) + if err != nil { + return httpResponse, errors.New(fmt.Sprintf("解析内容出错 %s", err)) + } + httpResponse.Status = resp.Status + httpResponse.StatusCode = resp.StatusCode + httpResponse.Header = resp.Header + httpResponse.Body = respBody + httpResponse.ContentLength = resp.ContentLength + return httpResponse, err +} + +func getString(i interface{}) string { + switch v := i.(type) { + case string: + return v + case []byte: + return string(v) + case int: + return strconv.Itoa(v) + case bool: + return strconv.FormatBool(v) + default: + marshal, _ := json.Marshal(v) + return string(marshal) + } +} diff --git a/utils/gohttp/gohttp_test.go b/utils/gohttp/gohttp_test.go new file mode 100644 index 00000000..46e342f3 --- /dev/null +++ b/utils/gohttp/gohttp_test.go @@ -0,0 +1,14 @@ +package gohttp + +import ( + "fmt" + "testing" +) + +func TestName(t *testing.T) { + get, err := Get("https://api.dtapp.net/", nil) + if err != nil { + return + } + fmt.Printf("%#v\n", get) +} diff --git a/utils/http/http.go b/utils/http/http.go deleted file mode 100644 index 5f6a9582..00000000 --- a/utils/http/http.go +++ /dev/null @@ -1,116 +0,0 @@ -package http - -import ( - "encoding/json" - "github.com/bitly/go-simplejson" - "github.com/dtapps/go-library/utils/request" - "gopkg.in/h2non/gentleman.v2" - "gopkg.in/h2non/gentleman.v2/plugins/body" -) - -// GetJson 发起Get请求 -func GetJson(url string, data string, headers map[string]interface{}) (res []byte, err error) { - // 创建一个 HTTP 客户端cli - cli := gentleman.New() - // 设置要请求的 URL 基础地址 - cli.URL(url + "?" + data) - // 创建一个请求对象req - req := cli.Request() - req.SetHeader("Content-Type", "application/json; charset=utf-8") - for key, value := range headers { - // 设置请求首部(Header) - req.SetHeader(key, value.(string)) - } - req.SetHeader("User-Agent", request.GetUserAgent()) - // 发送请求,获取响应对象res - response, err := req.Send() - if err != nil { - panic(err) - } - res = response.Bytes() - if json.Valid(res) == false { - panic("http server json error GetJson " + url + "?" + data) - } - return -} - -// PostJson 发起POST请求 -func PostJson(url string, data map[string]interface{}, headers map[string]interface{}) (res []byte, err error) { - // 创建一个 HTTP 客户端cli - cli := gentleman.New() - // 设置要请求的 URL 基础地址 - cli.URL(url) - cli.Use(body.JSON(data)) - // 创建一个请求对象req - req := cli.Request() - req.Method("POST") - req.SetHeader("Content-Type", "application/json; charset=utf-8") - for key, value := range headers { - // 设置请求首部(Header) - req.SetHeader(key, value.(string)) - } - req.SetHeader("User-Agent", request.GetUserAgent()) - // 发送请求,获取响应对象res - response, err := req.Send() - if err != nil { - panic(err) - } - res = response.Bytes() - if json.Valid(res) == false { - panic("http server json error PostJson " + url) - } - return -} - -// PostXml 发起POST请求 -func PostXml(url string, data map[string]string, headers map[string]interface{}) (res []byte, err error) { - // 创建一个 HTTP 客户端cli - cli := gentleman.New() - // 设置要请求的 URL 基础地址 - cli.URL(url) - cli.Use(body.XML(data)) - // 创建一个请求对象req - req := cli.Request() - req.Method("POST") - for key, value := range headers { - // 设置请求首部(Header) - req.SetHeader(key, value.(string)) - } - req.SetHeader("User-Agent", request.GetUserAgent()) - // 发送请求,获取响应对象res - response, err := req.Send() - if err != nil { - panic(err) - } - res = response.Bytes() - return -} - -// GetResponseBytes 兼容多层 Key 读取 -func GetResponseBytes(data []byte, keys ...string) (b []byte, err error) { - js, err := simplejson.NewJson(data) - if err != nil { - return - } - for _, key := range keys { - js = js.Get(key) - } - b, err = js.Encode() - return -} - -// GetResponseArrayIndexBytes 兼容多层 Key 读取某个 -func GetResponseArrayIndexBytes(data []byte, index int, keys ...string) (b []byte, err error) { - js, err := simplejson.NewJson(data) - if err != nil { - return - } - for _, key := range keys { - js = js.Get(key) - } - - js = js.GetIndex(index) - - b, err = js.Encode() - return -} diff --git a/utils/http/http_test.go b/utils/http/http_test.go deleted file mode 100644 index bc07a699..00000000 --- a/utils/http/http_test.go +++ /dev/null @@ -1,10 +0,0 @@ -package http - -import ( - "fmt" - "testing" -) - -func TestName(t *testing.T) { - fmt.Println(GetJson("https://api.dtapp.net/", "", nil)) -} diff --git a/utils/request/request.go b/utils/request/request.go index 8f1ab9ad..29fe348f 100644 --- a/utils/request/request.go +++ b/utils/request/request.go @@ -2,7 +2,6 @@ package request import ( "errors" - "fmt" "math/rand" "net" "net/http" @@ -15,7 +14,6 @@ import ( func ClientIp(r *http.Request) string { // xForwardedFor xForwardedFor := r.Header.Get("X-Forwarded-For") - fmt.Printf("xForwardedFor:%v \n", xForwardedFor) ip := strings.TrimSpace(strings.Split(xForwardedFor, ",")[0]) if ip != "" { return ip @@ -27,14 +25,12 @@ func ClientIp(r *http.Request) string { } // HTTPCLIENTIP HTTPCLIENTIP := r.Header.Get("HTTP_CLIENT_IP") - fmt.Printf("HTTPCLIENTIP:%v \n", HTTPCLIENTIP) ip = strings.TrimSpace(strings.Split(HTTPCLIENTIP, ",")[0]) if ip != "" { return ip } // HTTPXFORWARDEDFOR HTTPXFORWARDEDFOR := r.Header.Get("HTTP_X_FORWARDED_FOR") - fmt.Printf("HTTPXFORWARDEDFOR:%v \n", HTTPXFORWARDEDFOR) ip = strings.TrimSpace(strings.Split(HTTPXFORWARDEDFOR, ",")[0]) if ip != "" { return ip @@ -47,172 +43,75 @@ func ClientIp(r *http.Request) string { return "" } -// GetUserAgent 获取用户ua -func GetUserAgent() string { - return userAgentList[rand.Intn(len(userAgentList))] -} - +// GetRandomUserAgent 获取用户UA func GetRandomUserAgent() string { r := rand.New(rand.NewSource(time.Now().UnixNano())) return userAgentList[r.Intn(len(userAgentList))] } var userAgentList = []string{ - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36", - "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/44.0.2403.155 Safari/537.36", - "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36", - "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36", - "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36", - "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36", - "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2226.0 Safari/537.36", - "Mozilla/5.0 (Windows NT 6.4; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2225.0 Safari/537.36", - "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2225.0 Safari/537.36", - "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2224.3 Safari/537.36", - "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36", - "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36", - "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36", - "Mozilla/5.0 (Windows NT 4.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36", - "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36", - "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36", - "Mozilla/5.0 (X11; OpenBSD i386) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36", - "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1944.0 Safari/537.36", - "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.3319.102 Safari/537.36", - "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.2309.372 Safari/537.36", - "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.2117.157 Safari/537.36", - "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36", - "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1866.237 Safari/537.36", - "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/4E423F", - "Mozilla/5.0 (X11; Linux i686; rv:64.0) Gecko/20100101 Firefox/64.0", - "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:64.0) Gecko/20100101 Firefox/64.0", - "Mozilla/5.0 (X11; Linux i586; rv:63.0) Gecko/20100101 Firefox/63.0", - "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:63.0) Gecko/20100101 Firefox/63.0", - "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.10; rv:62.0) Gecko/20100101 Firefox/62.0", - "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:10.0) Gecko/20100101 Firefox/62.0", - "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.13; ko; rv:1.9.1b2) Gecko/20081201 Firefox/60.0", - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Firefox/58.0.1", - "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/58.0", - "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:52.59.12) Gecko/20160044 Firefox/52.59.12", - "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9a1) Gecko/20060814 Firefox/51.0", - "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20120121 Firefox/46.0", - "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.66.18) Gecko/20177177 Firefox/45.66.18", - "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1", - "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0", - "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10; rv:33.0) Gecko/20100101 Firefox/33.0", - "Mozilla/5.0 (X11; Linux i586; rv:31.0) Gecko/20100101 Firefox/31.0", - "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20130401 Firefox/31.0", - "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:28.0) Gecko/20100101 Firefox/31.0", - "Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0", - "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20120101 Firefox/29.0", - "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/29.0", - "Mozilla/5.0 (X11; OpenBSD amd64; rv:28.0) Gecko/20100101 Firefox/28.0", - "Mozilla/5.0 (X11; Linux x86_64; rv:28.0) Gecko/20100101 Firefox/28.0", - "Mozilla/5.0 (Windows NT 6.1; rv:27.3) Gecko/20130101 Firefox/27.3", - "Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:27.0) Gecko/20121011 Firefox/27.0", - "Mozilla/5.0 (Windows NT 6.2; rv:20.0) Gecko/20121202 Firefox/26.0", - "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0", - "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:25.0) Gecko/20100101 Firefox/25.0", - "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0", - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14931", - "Chrome (AppleWebKit/537.1; Chrome50.0; Windows NT 6.3) AppleWebKit/537.36 (KHTML like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393", - "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.9200", - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586", - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246", - "Mozilla/5.0 (Windows; U; Windows NT 6.1; rv:2.2) Gecko/20110201", - "Mozilla/5.0 (Windows; U; Windows NT 6.1; it; rv:2.0b4) Gecko/20100818", - "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9a3pre) Gecko/20070330", - "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.9.2a1pre) Gecko", - "Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.2.3) Gecko/20100401 Lightningquail/3.6.3", - "Mozilla/5.0 (X11; ; Linux i686; rv:1.9.2.20) Gecko/20110805", - "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.2.13) Gecko/20101203 iPhone", - "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.13; ) Gecko/20101203", - "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1b3) Gecko/20090305", - "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.9.0.9) Gecko/2009040821", - "Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.8) Gecko/2009032711", - "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.7) Gecko/2009032803", - "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.0.7) Gecko/2009021910 MEGAUPLOAD 1.0", - "Mozilla/5.0 (Windows; U; BeOS; en-US; rv:1.9.0.7) Gecko/2009021910", - "Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.6) Gecko/2009020911", - "Mozilla/5.0 (X11; U; Linux i686; en; rv:1.9.0.6) Gecko/20080528", - "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.6) Gecko/2009020409", - "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.3) Gecko/2008092814 (Debian-3.0.1-1)", - "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.3) Gecko/2008092816", - "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.3) Gecko/2008090713", - "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.2) Gecko Fedora/1.9.0.2-1.fc9", - "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.14) Gecko/2009091010", - "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523", - "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.1) Gecko/2008072610", - "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008072820 Ubuntu/8.04 (hardy) (Linux Mint)", - "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko", - "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.0.1) Gecko/2008070206", - "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-au; rv:1.9.0.1) Gecko/2008070206", - "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9) Gecko", - "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9) Gecko", - "Mozilla/5.0 (Windows; U; Windows NT 5.1; cs; rv:1.9) Gecko/2008052906", - "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.8b2) Gecko/20050702", - "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8b) Gecko/20050217", - "Mozilla/5.0 (Windows; U; Windows NT 5.1; de-AT; rv:1.8b) Gecko/20050217", - "Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.8b) Gecko/20050217", - "Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.8a6) Gecko/20050111", - "Mozilla/5.0 (Windows; U; Windows NT 5.1; de-AT; rv:1.8a5) Gecko/20041122", - "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8a4) Gecko/20040927", - "Mozilla/5.0 (Windows; U; Windows NT 5.0; de-AT; rv:1.8a4) Gecko/20040927", - "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8a3) Gecko/20040817", - "Opera/9.80 (X11; Linux i686; Ubuntu/14.10) Presto/2.12.388 Version/12.16", - "Opera/9.80 (Macintosh; Intel Mac OS X 10.14.1) Presto/2.12.388 Version/12.16", - "Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14", - "Mozilla/5.0 (Windows NT 6.0; rv:2.0) Gecko/20100101 Firefox/4.0 Opera 12.14", - "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0) Opera 12.14", - "Opera/12.80 (Windows NT 5.1; U; en) Presto/2.10.289 Version/12.02", - "Opera/9.80 (Windows NT 6.1; U; es-ES) Presto/2.9.181 Version/12.00", - "Opera/9.80 (Windows NT 5.1; U; zh-sg) Presto/2.9.181 Version/12.00", - "Opera/12.0(Windows NT 5.2;U;en)Presto/22.9.168 Version/12.00", - "Opera/12.0(Windows NT 5.1;U;en)Presto/22.9.168 Version/12.00", - "Mozilla/5.0 (Windows NT 5.1) Gecko/20100101 Firefox/14.0 Opera/12.0", - "Opera/9.80 (Windows NT 6.1; WOW64; U; pt) Presto/2.10.229 Version/11.62", - "Opera/9.80 (Windows NT 6.0; U; pl) Presto/2.10.229 Version/11.62", - "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52", - "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; de) Presto/2.9.168 Version/11.52", - "Opera/9.80 (Windows NT 5.1; U; en) Presto/2.9.168 Version/11.51", - "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; de) Opera 11.51", - "Opera/9.80 (X11; Linux x86_64; U; fr) Presto/2.9.168 Version/11.50", - "Opera/9.80 (X11; Linux i686; U; hu) Presto/2.9.168 Version/11.50", - "Opera/9.80 (X11; Linux i686; U; ru) Presto/2.8.131 Version/11.11", - "Opera/9.80 (X11; Linux i686; U; es-ES) Presto/2.8.131 Version/11.11", - "Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.1) Gecko/20061208 Firefox/5.0 Opera 11.11", - "Opera/9.80 (X11; Linux x86_64; U; bg) Presto/2.8.131 Version/11.10", - "Opera/9.80 (Windows NT 6.0; U; en) Presto/2.8.99 Version/11.10", - "Opera/9.80 (Windows NT 5.1; U; zh-tw) Presto/2.8.131 Version/11.10", - "Opera/9.80 (Windows NT 6.1; Opera Tablet/15165; U; en) Presto/2.8.149 Version/11.1", - "Opera/9.80 (X11; Linux x86_64; U; Ubuntu/10.10 (maverick); pl) Presto/2.7.62 Version/11.01", - "Opera/9.80 (X11; Linux i686; U; ja) Presto/2.7.62 Version/11.01", - "Opera/9.80 (X11; Linux i686; U; fr) Presto/2.7.62 Version/11.01", - "Opera/9.80 (Windows NT 6.1; U; zh-tw) Presto/2.7.62 Version/11.01", - "Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.7.62 Version/11.01", - "Opera/9.80 (Windows NT 6.1; U; sv) Presto/2.7.62 Version/11.01", - "Opera/9.80 (Windows NT 6.1; U; en-US) Presto/2.7.62 Version/11.01", - "Opera/9.80 (Windows NT 6.1; U; cs) Presto/2.7.62 Version/11.01", - "Opera/9.80 (Windows NT 6.0; U; pl) Presto/2.7.62 Version/11.01", - "Opera/9.80 (Windows NT 5.2; U; ru) Presto/2.7.62 Version/11.01", - "Opera/9.80 (Windows NT 5.1; U;) Presto/2.7.62 Version/11.01", + + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36 Edg/92.0.902.55", // Edge 2021-07-28 + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 Edg/92.0.902.67", // Edge 2021-08-09 + "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 Edg/92.0.902.67", // Edge 2021-08-11 + + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36", // Chrome 2021-07-28 + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36", // Chrome 2021-08-11 + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36", // Chrome 2021-08-11 + + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Safari/605.1.15", // Safari 2021-07-28 + + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:90.0) Gecko/20100101 Firefox/90.0", // Firefox 2021-07-28 + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Firefox/91.0 ", // Firefox 2021-08-11 +} + +// GetRandomUserAgentMobile 获取用户UA +func GetRandomUserAgentMobile() string { + r := rand.New(rand.NewSource(time.Now().UnixNano())) + return userAgentMobileList[r.Intn(len(userAgentMobileList))] +} + +var userAgentMobileList = []string{ + "Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) EdgiOS/94.0.972.2 Version/15.0 Mobile/15E148 Safari/604.1", // Edge 2021-08-11 + + "Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/92.0.4515.90 Mobile/15E148 Safari/604.1", // Chrome 2021-08-11 + + "Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1", // Safari 2021-08-11 + + "Mozilla/5.0 (Linux; U; Android 11; zh-cn; M2011K2C Build/RKQ1.200928.002) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/79.0.3945.147 Mobile Safari/537.36 XiaoMi/MiuiBrowser/15.1.12", // XIAOMI 2021-08-11 + + "Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 SP-engine/2.34.0 main%2F1.0 baiduboxapp/12.21.1.10 (Baidu; P2 15.0) NABar/1.0 themeUA=Theme/default webCore=0x1337abb70", // BAIDU 2021-08-11 + + "Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/19A5318f ChannelId(29) Ariver/1.1.0 AliApp(AP/10.2.28.6000) Nebula WK RVKType(1) AlipayDefined(nt:WIFI,ws:414|832|3.0,ac:T) AlipayClient/10.2.28.6000 Language/zh-Hans Region/CN NebulaX/1.0.0", // ALIPAY 2021-08-11 + + "Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/19A5261w AliApp(DingTalk/6.0.23) com.laiwang.DingTalk/15108471 Channel/201200 language/zh-Hans-CN UT4Aplus/0.0.6 WK", // DINGDING 2021-08-11 + + "Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.10(0x18000a24) NetType/WIFI Language/zh_CN", // WECHAT 2021-08-11 + + "Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 wxwork/3.1.11 MicroMessenger/7.0.1 Language/zh ColorScheme/Dark", // WECHATWORK 2021-08-11 + + "Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/19A5318f QQ/8.8.17.612 V1_IPH_SQ_8.8.17_1_APP_A Pixel/1242 MiniAppEnable SimpleUISwitch/0 StudyMode/0 QQTheme/1102 Core/WKWebView Device/Apple(iPhone 11 Pro Max) NetType/WIFI QBWebViewType/1 WKType/1", // QQ 2021-08-11 + } -func ExternalIP() (string, error) { - ifaces, err := net.Interfaces() +func ExternalIp() (string, error) { + faces, err := net.Interfaces() if err != nil { return "", err } - for _, iface := range ifaces { + for _, iface := range faces { if iface.Flags&net.FlagUp == 0 { continue // interface down } if iface.Flags&net.FlagLoopback != 0 { continue // loopback interface } - addrs, err := iface.Addrs() + adders, err := iface.Addrs() if err != nil { return "", err } - for _, addr := range addrs { + for _, addr := range adders { var ip net.IP switch v := addr.(type) { case *net.IPNet: @@ -230,5 +129,5 @@ func ExternalIP() (string, error) { return ip.String(), nil } } - return "", errors.New("are you connected to the network?") + return "", errors.New("are you connected to the network") } diff --git a/utils/request/request_test.go b/utils/request/request_test.go index 2128a180..855a254c 100644 --- a/utils/request/request_test.go +++ b/utils/request/request_test.go @@ -5,6 +5,6 @@ import ( "testing" ) -func TestName(t *testing.T) { - fmt.Println(ExternalIP()) +func TestExternalIp(t *testing.T) { + fmt.Println(ExternalIp()) }