Przeglądaj źródła

新增工具类调用页面渲染接口服务

maxiaoshan 3 lat temu
rodzic
commit
debc602047
2 zmienionych plików z 97 dodań i 0 usunięć
  1. 93 0
      src/spiderutil/renderdownload.go
  2. 4 0
      src/spiderutil/sysconfig.go

+ 93 - 0
src/spiderutil/renderdownload.go

@@ -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 ""
+}

+ 4 - 0
src/spiderutil/sysconfig.go

@@ -39,6 +39,10 @@ type config struct {
 	ThreadBaseNum     int                        `json:"threadbasenum"`     //开启线程的数据基数
 	ThreadUpperLimit  int                        `json:"threadupperlimit"`  //总线程上限
 	RedisClusterAddrs []string                   `json:"redisclusteraddrs"` //redis集群地址
+	ProxyAddr         string                     `json:"proxyaddr"`         //代理地址
+	ProxyAuthor       string                     `json:"proxyauthor"`       //代理作者
+	RenderAddr        string                     `json:"renderaddr"`        //页面渲染服务地址
+
 	//补漏
 	Checkmaxpage  map[string]int `json:"checkmaxpage"`
 	CheckHourTime int            `json:"checkhourtime"`