goProject/trunk/goutil/webUtil/get.go

183 lines
3.7 KiB
Go
Raw Permalink Normal View History

2025-01-06 16:01:02 +08:00
package webUtil
import (
"fmt"
"io/ioutil"
"net/http"
"strings"
)
// GET数据
// weburl远程服务器地址
// header包头集合
// 返回值:
// 返回的字节
// 错误对象
func GetWebData(weburl string, header map[string]string) (result []byte, err error) {
// 构造请求对象
var request *http.Request
request, err = http.NewRequest("GET", weburl, nil)
if err != nil {
return
}
// 处理包头
if header != nil {
for k, v := range header {
request.Header.Add(k, v)
}
}
// 构造transport对象
transport := NewTransport()
transport.DisableKeepAlives = true
transport = GetTimeoutTransport(transport, 30)
// 构造httpClient对象
client := &http.Client{Transport: transport}
// 发送数据
var response *http.Response
response, err = client.Do(request)
if err != nil {
return
}
defer response.Body.Close()
// 读取数据
if response.StatusCode == http.StatusOK {
result, err = ioutil.ReadAll(response.Body)
if err != nil {
return
}
}
return
}
// GET数据新方法
// weburl:远程服务器地址
// data数据集合
// header:包头内容
// transport:transport对象
// 返回值
// http StatusCode
// 字节数组
// 错误对象
func GetWebData2(weburl string, data map[string]string, header map[string]string, transport *http.Transport) (statusCode int, result []byte, err error) {
// 处理data将data以key=value的形式拼接到weburl后形成一个完整的url
dataStr := ""
count := 0
for k, v := range data {
if count == len(data)-1 {
dataStr += fmt.Sprintf("%s=%s", k, v)
} else {
dataStr += fmt.Sprintf("%s=%s&", k, v)
}
count += 1
}
if dataStr != "" {
if strings.Contains(weburl, "?") {
weburl = fmt.Sprintf("%s&%s", weburl, dataStr)
} else {
weburl = fmt.Sprintf("%s?%s", weburl, dataStr)
}
}
// 构造请求对象
var request *http.Request
request, err = http.NewRequest("GET", weburl, nil)
if err != nil {
return
}
// 处理头部
if header != nil {
for k, v := range header {
request.Header.Add(k, v)
}
}
// 构造transport对象
if transport == nil {
transport = NewTransport()
transport.DisableKeepAlives = true
transport = GetTimeoutTransport(transport, 30)
}
// 构造httpClient对象
client := &http.Client{Transport: transport}
// 发送数据
var response *http.Response
response, err = client.Do(request)
if err != nil {
return
}
defer response.Body.Close()
// 获取返回值
statusCode = response.StatusCode
result, err = ioutil.ReadAll(response.Body)
return
}
// GET数据新方法
// weburl:远程服务器地址
// dataStr:参数字符串
// header:包头内容
// transport:transport对象
// 返回值
// http StatusCode
// 字节数组
// 错误对象
func GetWebData3(weburl string, dataStr string, header map[string]string, transport *http.Transport) (statusCode int, result []byte, err error) {
if dataStr != "" {
if strings.Contains(weburl, "?") {
weburl = fmt.Sprintf("%s&%s", weburl, dataStr)
} else {
weburl = fmt.Sprintf("%s?%s", weburl, dataStr)
}
}
// 构造请求对象
var request *http.Request
request, err = http.NewRequest("GET", weburl, nil)
if err != nil {
return
}
// 处理头部
if header != nil {
for k, v := range header {
request.Header.Add(k, v)
}
}
// 构造transport对象
if transport == nil {
transport = NewTransport()
transport.DisableKeepAlives = true
transport = GetTimeoutTransport(transport, 30)
}
// 构造httpClient对象
client := &http.Client{Transport: transport}
// 发送数据
var response *http.Response
response, err = client.Do(request)
if err != nil {
return
}
defer response.Body.Close()
// 获取返回值
statusCode = response.StatusCode
result, err = ioutil.ReadAll(response.Body)
return
}