ila 3 anos atrás
pai
commit
309a77b579
8 arquivos alterados com 133 adições e 11 exclusões
  1. 1 1
      core/command_line.go
  2. 1 0
      go.mod
  3. 5 0
      go.sum
  4. 58 2
      main.go
  5. 10 5
      xnet/cookie.go
  6. 1 1
      xnet/dingtalk_oa.go
  7. 50 0
      xnet/download.go
  8. 7 2
      xnet/xhttp.go

+ 1 - 1
core/command_line.go

@@ -8,7 +8,7 @@ import (
 )
 
 func Command(name string, arg ...string) (string, error) {
-	ctxt, cancel := context.WithTimeout(context.Background(), 120*time.Second)
+	ctxt, cancel := context.WithTimeout(context.Background(), 60*5*time.Second)
 	defer cancel() //releases resources if slowOperation completes before timeout elapses
 
 	cmd := exec.CommandContext(ctxt, name, arg...)

+ 1 - 0
go.mod

@@ -7,6 +7,7 @@ require (
 	github.com/blinkbean/dingtalk v0.0.0-20210905093040-7d935c0f7e19 // indirect
 	github.com/go-ole/go-ole v1.2.6 // indirect
 	github.com/koltyakov/gosip v0.0.0-20211102125300-4724730f3af9 // indirect
+	github.com/sqweek/dialog v0.0.0-20211002065838-9a201b55ab91 // indirect
 	github.com/tebeka/selenium v0.9.9 // indirect
 	github.com/zellyn/kooky v0.0.0-20210408152652-87b89e95f98f // indirect
 )

+ 5 - 0
go.sum

@@ -6,6 +6,8 @@ github.com/Azure/go-ntlmssp v0.0.0-20200615164410-66371956d46c/go.mod h1:chxPXzS
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
 github.com/BurntSushi/xgbutil v0.0.0-20160919175755-f7c97cef3b4e/go.mod h1:uw9h2sd4WWHOPdJ13MQpwK5qYWKYDumDqxWWIknEQ+k=
+github.com/TheTitanrain/w32 v0.0.0-20180517000239-4f5cfb03fabf h1:FPsprx82rdrX2jiKyS17BH6IrTmUBYqZa/CXT4uvb+I=
+github.com/TheTitanrain/w32 v0.0.0-20180517000239-4f5cfb03fabf/go.mod h1:peYoMncQljjNS6tZwI9WVyQB3qZS6u79/N3mBOcnd3I=
 github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
 github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394 h1:OYA+5W64v3OgClL+IrOD63t4i/RW7RqrAVl9LTZ9UqQ=
 github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394/go.mod h1:Q8n74mJTIgjX4RBBcHnJ05h//6/k6foqmgE45jTQtxg=
@@ -69,6 +71,8 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
 github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
+github.com/sqweek/dialog v0.0.0-20211002065838-9a201b55ab91 h1:Ap4SC7+bIAFzh81vREQSElqYUtuxPgknVl1ol5rOf9w=
+github.com/sqweek/dialog v0.0.0-20211002065838-9a201b55ab91/go.mod h1:/qNPSY91qTz/8TgHEMioAUc6q7+3SOybeKczHMXFcXw=
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
 github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
@@ -138,6 +142,7 @@ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc=
 golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=

+ 58 - 2
main.go

@@ -1,8 +1,21 @@
 package main
 
 import (
+	"bufio"
 	"fmt"
 	"gcore/core"
+	"github.com/sqweek/dialog"
+	"golang.org/x/text/encoding/simplifiedchinese"
+	"os"
+	"os/exec"
+	"strconv"
+)
+
+type Charset string
+
+const (
+	UTF8    = Charset("UTF-8")
+	GB18030 = Charset("GB18030")
 )
 
 func init() {
@@ -27,11 +40,54 @@ func init() {
 	//workData,_:=core.GetWorkData(30)
 	//fmt.Printf("%v\n", workData)
 
-	ret := core.GetChromeUserDataDir()
-	fmt.Printf("ret=>%v\n", ret)
+	//ret := core.GetChromeUserDataDir()
+	//fmt.Printf("ret=>%v\n", ret)
+	chromeExePath, _ := core.GetChromeExePath()
+	exists, _ := core.FileExists(chromeExePath)
+	if exists == false {
+		dialog.Message("请先安装chrome(谷歌)浏览器再运行本程序!!").Title("提示").Error()
+		return
+	}
+	args := os.Args
+	chromePort := 9200
+	if len(args) > 1 {
+		chromePort, _ = strconv.Atoi(args[1])
+	}
+	params := []string{
+		"--disable-gpu",
+		"--window-size=1920,1080",
+		//" --headless",
+		fmt.Sprintf("--remote-debugging-port=%v", chromePort),
+	}
 
+	cmd := exec.Command(chromeExePath, params...)
+	stdout, err := cmd.StdoutPipe()
+	if err != nil {
+		fmt.Println(err)
+		return
+	}
+	cmd.Start()
+	in := bufio.NewScanner(stdout)
+	for in.Scan() {
+		cmdRe := ConvertByte2String(in.Bytes(), "GB18030")
+		fmt.Println(cmdRe)
+	}
+	cmd.Wait()
 }
 
+func ConvertByte2String(byte []byte, charset Charset) string {
+	var str string
+	switch charset {
+	case GB18030:
+		var decodeBytes, _ = simplifiedchinese.GB18030.NewDecoder().Bytes(byte)
+		str = string(decodeBytes)
+	case UTF8:
+		fallthrough
+	default:
+		str = string(byte)
+	}
+	return str
+}
 func main() {
 
 }

+ 10 - 5
xnet/cookie.go

@@ -1,6 +1,7 @@
 package xnet
 
 import (
+	"gcore/core"
 	"github.com/zellyn/kooky/chrome"
 	"log"
 	"net/http"
@@ -16,11 +17,15 @@ import (
 func LoadChromeCookies(domain string) ([]*http.Cookie, error) {
 
 	var cookies []*http.Cookie
-
-	dir, _ := os.UserHomeDir()
-
-	cookiesFile := filepath.Join(dir, "/AppData/Local/Google/Chrome/User Data/Default/Cookies")
-
+	cookiesName := "Cookies"
+	userHomeDir, _ := os.UserHomeDir()
+	defaultPath := "AppData/Local/Google/Chrome/User Data/Default/"
+	cookiesFile := filepath.Join(userHomeDir, defaultPath, cookiesName)
+	exist, _ := core.FileExists(cookiesFile)
+	if exist == false {
+		cookiesFile = filepath.Join(userHomeDir, defaultPath, "Network", cookiesName)
+	}
+	println(cookiesFile)
 	chromeCookies, err := chrome.ReadCookies(cookiesFile)
 	if err != nil {
 		log.Printf("ReadCookies error : %v\n", err)

+ 1 - 1
xnet/dingtalk_oa.go

@@ -38,7 +38,7 @@ type DingTalkConf struct {
 // @return
 func (m *DingTalkConf) GetToken() error {
 	params := map[string]string{"appkey": m.AppKey, "appsecret": m.AppSecret}
-	content, err := GetX(m.GetTokenUrl, params, m.Headers, m.Cookie)
+	content, err := GetX(m.GetTokenUrl, "", params, m.Headers, m.Cookie)
 	if err != nil {
 		log.Printf("GetToken error : %v", err)
 	}

+ 50 - 0
xnet/download.go

@@ -0,0 +1,50 @@
+package xnet
+
+import (
+	"bytes"
+	"fmt"
+	"golang.org/x/text/encoding/simplifiedchinese"
+	"os/exec"
+)
+
+// Wget 调用wget.exe下载,-t参数表示重试次数,-T参数表示超时等待时间,-w两次尝试之间间隔SECONDS秒,-O把文档写到FILE文件中
+func Wget(url, localPath string) (err error) {
+	cmd := exec.Command("wget.exe", url, "-t", "3", "-T", "25", "-w", "3", "-O", localPath)
+	var stdout bytes.Buffer
+	var stderr bytes.Buffer
+	cmd.Stdout = &stdout
+	cmd.Stderr = &stderr
+	err = cmd.Run()
+	if err != nil {
+
+		fmt.Println(fmt.Sprint(err) + ": " + ConvertByte2String([]byte(stderr.String()), GB18030))
+		return err
+	}
+	fmt.Println("Result: " + stdout.String())
+
+	return
+}
+
+type Charset string
+
+const (
+	UTF8    = Charset("UTF-8")
+	GB18030 = Charset("GB18030")
+)
+
+// ConvertByte2String cmd输出内容转中文
+func ConvertByte2String(byte []byte, charset Charset) string {
+
+	var str string
+	switch charset {
+	case GB18030:
+		decodeBytes, _ := simplifiedchinese.GB18030.NewDecoder().Bytes(byte)
+		str = string(decodeBytes)
+	case UTF8:
+		fallthrough
+	default:
+		str = string(byte)
+	}
+
+	return str
+}

+ 7 - 2
xnet/xhttp.go

@@ -70,7 +70,7 @@ func PostJson(srcUrl string, params, headers map[string]string, data map[string]
 // @description 带参数,头部,cookie的get请求封装
 // @param
 // @return
-func GetX(srcUrl string, params, headers map[string]string, cookies []*http.Cookie) (string, error) {
+func GetX(srcUrl, proxyUrl string, params, headers map[string]string, cookies []*http.Cookie) (string, error) {
 	var content string
 
 	//解析原生的url
@@ -86,8 +86,13 @@ func GetX(srcUrl string, params, headers map[string]string, cookies []*http.Cook
 	//把传入的cookies装入罐
 	jar.SetCookies(parseUrl, cookies)
 
+	transport := &http.Transport{}
+	if len(proxyUrl) > 1 {
+		proxyProxyUrl, _ := url.Parse(proxyUrl)
+		transport.Proxy = http.ProxyURL(proxyProxyUrl)
+	}
 	//初始化请求,加入15秒timeout
-	client := &http.Client{Jar: jar, Timeout: 15 * time.Second}
+	client := &http.Client{Jar: jar, Timeout: 15 * time.Second, Transport: transport}
 	req, _ := http.NewRequest("GET", srcUrl, nil)
 
 	//处理query参数