http.go 3.5 KB
Newer Older
1
package client
2 3

import (
aaronchen2k2k's avatar
aaronchen2k2k 已提交
4
	"encoding/json"
5 6
	"fmt"
	"github.com/ajg/form"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
7
	"github.com/easysoft/zentaoatf/src/model"
8
	"github.com/easysoft/zentaoatf/src/utils/log"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
9
	"github.com/easysoft/zentaoatf/src/utils/vari"
10 11
	"io/ioutil"
	"net/http"
12
	"regexp"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
13
	"strings"
14 15
)

aaronchen2k2k's avatar
aaronchen2k2k 已提交
16
func Get(url string, params map[string]string) (string, bool) {
17
	logUtils.PrintToCmd(url)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
18 19 20 21
	client := &http.Client{}

	req, err := http.NewRequest("GET", url, nil)
	if err != nil {
22
		logUtils.PrintToCmd(err.Error())
aaronchen2k2k's avatar
aaronchen2k2k 已提交
23
		return "", false
aaronchen2k2k's avatar
aaronchen2k2k 已提交
24 25
	}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
26
	req.Header.Set("cookie", vari.SessionVar+"="+vari.SessionId)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
27 28

	q := req.URL.Query()
aaronchen2k2k's avatar
aaronchen2k2k 已提交
29
	q.Add(vari.SessionVar, vari.SessionId)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
30 31 32 33 34
	if params != nil {
		for pkey, pval := range params {
			q.Add(pkey, pval)
		}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
35 36
	}
	req.URL.RawQuery = q.Encode()
aaronchen2k2k's avatar
aaronchen2k2k 已提交
37 38 39

	resp, err := client.Do(req)
	if err != nil {
40
		logUtils.PrintToCmd(err.Error())
aaronchen2k2k's avatar
aaronchen2k2k 已提交
41
		return "", false
aaronchen2k2k's avatar
aaronchen2k2k 已提交
42 43
	}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
44
	bodyStr, _ := ioutil.ReadAll(resp.Body)
45
	logUtils.PrintUnicode(bodyStr)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
46 47 48

	var bodyJson model.ZentaoResponse
	json.Unmarshal(bodyStr, &bodyJson)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
49 50

	defer resp.Body.Close()
aaronchen2k2k's avatar
aaronchen2k2k 已提交
51 52 53 54 55 56

	status := bodyJson.Status
	if status == "" { // 非嵌套结构
		return string(bodyStr), true
	} else { // 嵌套结构
		dataStr := bodyJson.Data
57
		return dataStr, status == "success"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
58
	}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
59 60
}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
61
func PostObject(url string, params interface{}) (string, bool) {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
62
	logUtils.PrintToCmd(url)
63 64
	client := &http.Client{}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
65 66
	val, _ := form.EncodeToString(params)

aaronchen2k2k's avatar
aaronchen2k2k 已提交
67
	// convert data to post fomat
aaronchen2k2k's avatar
aaronchen2k2k 已提交
68 69 70
	re3, _ := regexp.Compile(`([^&]*?)=`)
	data := re3.ReplaceAllStringFunc(val, replacePostData)

71
	logUtils.PrintToCmd(fmt.Sprintf("%s", data))
72 73

	req, err := http.NewRequest("POST", url, strings.NewReader(data))
74
	if err != nil {
75
		logUtils.PrintToCmd(err.Error())
76 77 78
		return "", false
	}

79
	req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
80 81 82 83
	req.Header.Set("cookie", vari.SessionVar+"="+vari.SessionId)

	resp, err := client.Do(req)
	if err != nil {
84
		logUtils.PrintToCmd(err.Error())
85 86 87 88
		return "", false
	}

	bodyStr, _ := ioutil.ReadAll(resp.Body)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
89
	logUtils.PrintUnicode(bodyStr)
90 91 92 93 94 95 96 97 98 99 100

	var bodyJson model.ZentaoResponse
	json.Unmarshal(bodyStr, &bodyJson)

	defer resp.Body.Close()

	status := bodyJson.Status
	if status == "" { // 非嵌套结构
		return string(bodyStr), true
	} else { // 嵌套结构
		dataStr := bodyJson.Data
101
		return dataStr, status == "success"
102 103 104 105
	}
}

func PostStr(url string, params map[string]string) (string, bool) {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
106
	logUtils.PrintToCmd(url)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
107
	client := &http.Client{}
108

aaronchen2k2k's avatar
aaronchen2k2k 已提交
109 110 111 112 113 114 115 116
	paramStr := ""
	idx := 0
	for pkey, pval := range params {
		if idx > 0 {
			paramStr += "&"
		}
		paramStr = paramStr + pkey + "=" + pval
		idx++
117 118
	}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
119
	req, err := http.NewRequest("POST", url, strings.NewReader(paramStr))
120
	if err != nil {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
121
		return "", false
122 123
	}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
124
	req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
aaronchen2k2k's avatar
aaronchen2k2k 已提交
125
	req.Header.Set("cookie", vari.SessionVar+"="+vari.SessionId)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
126 127

	resp, err := client.Do(req)
128
	if err != nil {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
129
		return "", false
130 131
	}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
132
	bodyStr, _ := ioutil.ReadAll(resp.Body)
133
	logUtils.PrintUnicode(bodyStr)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
134 135 136

	var bodyJson model.ZentaoResponse
	json.Unmarshal(bodyStr, &bodyJson)
137 138

	defer resp.Body.Close()
aaronchen2k2k's avatar
aaronchen2k2k 已提交
139 140 141 142 143 144

	status := bodyJson.Status
	if status == "" { // 非嵌套结构
		return string(bodyStr), true
	} else { // 嵌套结构
		dataStr := bodyJson.Data
145
		return dataStr, status == "success"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
146
	}
147
}
148 149

func replacePostData(str string) string {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
150 151 152 153
	//logUtils.PrintToCmd(str)
	//logUtils.PrintToCmd(str[:1])
	//logUtils.PrintToCmd(str[1:])
	//logUtils.PrintToCmd("---")
aaronchen2k2k's avatar
aaronchen2k2k 已提交
154 155 156 157 158 159 160

	str = strings.ToLower(str[:1]) + str[1:]

	if strings.Index(str, ".") > -1 {
		str = strings.Replace(str, ".", "[", -1)
		str = strings.Replace(str, "=", "]=", -1)
	}
161 162
	return str
}