|
@@ -0,0 +1,93 @@
|
|
|
+package spiderutil
|
|
|
+
|
|
|
+import (
|
|
|
+ "encoding/json"
|
|
|
+ "github.com/imroc/req"
|
|
|
+ "io/ioutil"
|
|
|
+ "net/http"
|
|
|
+ qu "qfw/util"
|
|
|
+ "time"
|
|
|
+)
|
|
|
+
|
|
|
+//调用页面渲染接口获取页面
|
|
|
+func DownloadByRender(href string) (contenthtml string) {
|
|
|
+ defer qu.Catch()
|
|
|
+ //proxyUrl := GetProxyAddr() //获取代理地址
|
|
|
+ //qu.Debug(proxyUrl)
|
|
|
+ //qu.Debug(href)
|
|
|
+ //url := Config.RenderAddr + "?iframes=1&wait=5&html=1&url=https://zcpt.ahjkjt.com/#/anhui/transactionInfoIndex"
|
|
|
+ //req1, err := http.NewRequest(http.MethodGet, url, nil)
|
|
|
+ //qu.Debug(err)
|
|
|
+ //client1 := http.Client{}
|
|
|
+ //resp1, err := client1.Do(req1)
|
|
|
+ //bodyByte, err := ioutil.ReadAll(resp1.Body)
|
|
|
+ //qu.Debug(err)
|
|
|
+ //qu.Debug(string(bodyByte))
|
|
|
+ //调用渲染接口
|
|
|
+ client := req.C().SetTimeout(3 * time.Minute)
|
|
|
+ //尝试下载三次 1、无代理 2、有代理 3、重新获取代理
|
|
|
+ param := map[string]string{
|
|
|
+ "iframes": "1", //是否渲染iframe
|
|
|
+ "wait": "5", //渲染等待时长s
|
|
|
+ "html": "1",
|
|
|
+ "url": href,
|
|
|
+ }
|
|
|
+ for i := 1; i <= 3; i++ {
|
|
|
+ if i != 1 {
|
|
|
+ param["proxy"] = GetProxyAddr() //获取代理地址
|
|
|
+ }
|
|
|
+ resp, err := client.R().SetQueryParams(param).Get(Config.RenderAddr)
|
|
|
+ if err != nil {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ tmp := map[string]interface{}{}
|
|
|
+ if json.Unmarshal(resp.Bytes(), &tmp) != nil {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ if html := tmp["html"]; html == nil {
|
|
|
+ continue
|
|
|
+ } else {
|
|
|
+ contenthtml, _ = tmp["html"].(string)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+func GetProxyAddr() string {
|
|
|
+ defer qu.Catch()
|
|
|
+ //获取代理
|
|
|
+ req, err := http.NewRequest(http.MethodGet, Config.ProxyAddr, nil)
|
|
|
+ if err != nil {
|
|
|
+ qu.Debug(err)
|
|
|
+ return ""
|
|
|
+ }
|
|
|
+ //添加请求头
|
|
|
+ req.Header.Add("Authorization", Config.ProxyAuthor)
|
|
|
+ client := http.Client{}
|
|
|
+ //发送请求
|
|
|
+ resp, err := client.Do(req)
|
|
|
+ if err != nil {
|
|
|
+ qu.Debug(err)
|
|
|
+ return ""
|
|
|
+ }
|
|
|
+ defer resp.Body.Close()
|
|
|
+ bodyByte, err := ioutil.ReadAll(resp.Body)
|
|
|
+ if err != nil {
|
|
|
+ qu.Debug(err)
|
|
|
+ return ""
|
|
|
+ }
|
|
|
+ tmp := map[string]interface{}{}
|
|
|
+ if json.Unmarshal(bodyByte, &tmp) != nil {
|
|
|
+ qu.Debug(err)
|
|
|
+ return ""
|
|
|
+ }
|
|
|
+ if data, ok := tmp["data"].(map[string]interface{}); ok && len(data) > 0 {
|
|
|
+ if httpProxy, ok := data["http"].(string); ok {
|
|
|
+ return httpProxy
|
|
|
+ } else if httpsProxy, ok := data["https"].(string); ok {
|
|
|
+ return httpsProxy
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return ""
|
|
|
+}
|