Files
easygoadmin/utils/http.go
yaoyilin 1b36bd8fbe feat: 初始化项目
初始化项目
2022-10-31 22:29:16 +08:00

312 lines
7.6 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 支付工具类
* @author
* @since 2021/8/12
* @File : pay
*/
package utils
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net"
"net/http"
url2 "net/url"
"time"
)
var SelfNetTransport *http.Transport
var HttpClient *http.Client
func init() {
SelfNetTransport = &http.Transport{
DialContext: (&net.Dialer{
Timeout: 20 * time.Second,
KeepAlive: 50 * time.Second,
}).DialContext,
MaxIdleConns: 5000,
MaxIdleConnsPerHost: 20, //每个host最大空闲连接
IdleConnTimeout: 50 * time.Second,
TLSHandshakeTimeout: 50 * time.Second,
ResponseHeaderTimeout: time.Second * time.Duration(10), //数据收发10秒超时
//DisableKeepAlives: true,
//ExpectContinueTimeout: 1 * time.Second,
}
HttpClient = &http.Client{
Timeout: 10 * time.Second,
Transport: SelfNetTransport,
}
}
// 1、测试post请求 form
func PostReq(reqMap map[string]interface{}, url string) (string, bool) {
data := make(url2.Values)
for index, item := range reqMap {
str, _ := item.(string)
data[index] = []string{str}
}
res2, err2 := http.PostForm(url, data)
if err2 != nil {
fmt.Println("TestPostReq http.NewRequest err:", err2)
return "", false
}
defer res2.Body.Close()
respBody, err := ioutil.ReadAll(res2.Body)
if err != nil {
fmt.Println("TestPostReq ioutil.ReadAll() err: ", err)
return "", false
}
rsp := make(map[string]interface{})
err = json.Unmarshal(respBody, &rsp)
if err != nil {
fmt.Println("TestPostReq json.Unmarshal() err: ", err)
return "", false
}
// 最后经过字段筛选后再序列化成json格式即可
result, err := json.Marshal(rsp)
if err != nil {
fmt.Println("TestPostReq json.Marrshal() err2: ", err)
return "", false
}
return string(result), false
}
func PostReqV2(reqMap map[string]string, url string) (string, bool) {
data := make(url2.Values)
for index, item := range reqMap {
str := item
data[index] = []string{str}
}
res2, err2 := http.PostForm(url, data)
if err2 != nil {
fmt.Println("TestPostReq http.NewRequest err:", err2)
return "", false
}
defer res2.Body.Close()
respBody, err := ioutil.ReadAll(res2.Body)
if err != nil {
fmt.Println("TestPostReq ioutil.ReadAll() err: ", err)
return "", false
}
rsp := make(map[string]interface{})
err = json.Unmarshal(respBody, &rsp)
if err != nil {
fmt.Println("TestPostReq json.Unmarshal() err: ", err)
return "", false
}
// 最后经过字段筛选后再序列化成json格式即可
result, err := json.Marshal(rsp)
if err != nil {
fmt.Println("TestPostReq json.Marrshal() err2: ", err)
return "", false
}
return string(result), true
}
func PostReqJson(reqMap map[string]interface{}, url string) (string, bool) {
body, err := json.Marshal(reqMap)
if err != nil {
fmt.Println("TestPostReq json.Marshal err:", err)
return "", false
}
req, err := http.NewRequest(http.MethodPost, url, bytes.NewReader(body))
if err != nil {
fmt.Println("TestPostReq http.NewRequest err:", err)
return "", false
}
req.Header.Set("Content-Type", "application/json")
//client := &http.Client{Timeout: 5 * time.Second} // 设置请求超时时长5s
resp, err := HttpClient.Do(req)
if err != nil {
fmt.Println("TestPostReq http.DefaultClient.Do() err: ", err)
return "", false
}
defer resp.Body.Close()
respBody, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("TestPostReq ioutil.ReadAll() err: ", err)
return "", false
}
rsp := make(map[string]interface{})
err = json.Unmarshal(respBody, &rsp)
if err != nil {
fmt.Println("TestPostReq json.Unmarshal() err: ", err)
return "", false
}
// 最后经过字段筛选后再序列化成json格式即可
result, err := json.Marshal(rsp)
if err != nil {
fmt.Println("TestPostReq json.Marrshal() err2: ", err)
return "", false
}
return string(result), true
}
func PostReqJsonV2(reqMap map[string]string, url string) (string, bool) {
body, err := json.Marshal(reqMap)
if err != nil {
fmt.Println("TestPostReq json.Marshal err:", err)
return "", false
}
req, err := http.NewRequest(http.MethodPost, url, bytes.NewReader(body))
if err != nil {
fmt.Println("TestPostReq http.NewRequest err:", err)
return "", false
}
req.Header.Set("Content-Type", "application/json")
//client := &http.Client{Timeout: 5 * time.Second} // 设置请求超时时长5s
resp, err := HttpClient.Do(req)
if err != nil {
fmt.Println("TestPostReq http.DefaultClient.Do() err: ", err)
return "", false
}
defer resp.Body.Close()
respBody, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("TestPostReq ioutil.ReadAll() err: ", err)
return "", false
}
rsp := make(map[string]interface{})
err = json.Unmarshal(respBody, &rsp)
if err != nil {
fmt.Println("TestPostReq json.Unmarshal() err: ", err)
return "", false
}
// 最后经过字段筛选后再序列化成json格式即可
result, err := json.Marshal(rsp)
if err != nil {
fmt.Println("TestPostReq json.Marrshal() err2: ", err)
return "", false
}
return string(result), true
}
type Rsp struct {
// Code int `json:"code"` // 比如这里仅需要rsp字段视具体情况而定那Rsp结构体不解析code字段即可~
Rsp string `json:"rsp"`
}
func GetReq(url string) (string, bool) {
req, err := http.NewRequest(http.MethodGet, url, nil)
if err != nil {
return "TestGetReq http.NewRequest err:" + err.Error(), false
}
//client := &http.Client{Timeout: 5 * time.Second} // 设置请求超时时长5s
resp, err := HttpClient.Do(req)
if err != nil {
return "TestGetReq http.DefaultClient.Do() err: " + err.Error(), false
}
defer resp.Body.Close()
respBody, err := ioutil.ReadAll(resp.Body)
if err != nil {
return "TestGetReq ioutil.ReadAll() err: " + err.Error(), false
}
// fmt.Println("respBody: ", string(respBody))
rsp := make(map[string]interface{})
err = json.Unmarshal(respBody, &rsp)
if err != nil {
return "TestGetReq json.Unmarshal() err: " + err.Error(), false
}
// 最后经过字段筛选后再序列化成json格式即可比如这里仅需要rsp字段视具体情况而定那Rsp结构体不解析code字段即可~
result, err := json.Marshal(rsp)
if err != nil {
return "TestGetReq json.Marrshal() err2: " + err.Error(), false
}
return string(result), true
}
func GetUrl(url string, data map[string]string) string {
v := url2.Values{}
for key, val := range data {
v.Add(key, val)
}
url = url + v.Encode()
return url
}
func PostReqJsonHeader(reqMap map[string]string, url string, header map[string]string) (string, bool) {
body, err := json.Marshal(reqMap)
if err != nil {
fmt.Println("TestPostReq json.Marshal err:", err)
return "", false
}
req, err := http.NewRequest(http.MethodPost, url, bytes.NewReader(body))
if err != nil {
fmt.Println("TestPostReq http.NewRequest err:", err)
return "", false
}
req.Header.Set("Content-Type", "application/json")
for index, item := range header {
req.Header.Set(index, item)
}
//client := &http.Client{Timeout: 5 * time.Second} // 设置请求超时时长5s
resp, err := HttpClient.Do(req)
if err != nil {
fmt.Println("TestPostReq http.DefaultClient.Do() err: ", err)
return "", false
}
defer resp.Body.Close()
respBody, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("TestPostReq ioutil.ReadAll() err: ", err)
return "", false
}
rsp := make(map[string]interface{})
err = json.Unmarshal(respBody, &rsp)
if err != nil {
fmt.Println("TestPostReq json.Unmarshal() err: ", err)
return "", false
}
// 最后经过字段筛选后再序列化成json格式即可
result, err := json.Marshal(rsp)
if err != nil {
fmt.Println("TestPostReq json.Marrshal() err2: ", err)
return "", false
}
return string(result), true
}