193 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			193 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package httpclient
 | 
						|
 | 
						|
// http request 工具函数
 | 
						|
import (
 | 
						|
	"crypto/tls"
 | 
						|
	"errors"
 | 
						|
	"fmt"
 | 
						|
	"log"
 | 
						|
	"net/url"
 | 
						|
	"strings"
 | 
						|
	"time"
 | 
						|
 | 
						|
	"github.com/bytedance/sonic"
 | 
						|
	"github.com/valyala/fasthttp"
 | 
						|
	"github.com/valyala/fasthttp/fasthttpproxy"
 | 
						|
)
 | 
						|
 | 
						|
var (
 | 
						|
	fastHttpClient = &fasthttp.Client{
 | 
						|
		Name:                "http",
 | 
						|
		MaxConnsPerHost:     10000,
 | 
						|
		MaxIdleConnDuration: 30 * time.Second,
 | 
						|
		ReadTimeout:         50 * time.Second,
 | 
						|
		WriteTimeout:        50 * time.Second,
 | 
						|
		TLSConfig:           &tls.Config{InsecureSkipVerify: true},
 | 
						|
	}
 | 
						|
	socksDialer fasthttp.DialFunc
 | 
						|
	proxyUrl    = ""
 | 
						|
	proxyScheme = "socks5"
 | 
						|
)
 | 
						|
 | 
						|
func NewHttpRequestWithFasthttp(reqMethod, reqUrl, postData string, headers map[string]string) ([]byte, error) {
 | 
						|
	// loghelper.InfoLog("use fasthttp client")
 | 
						|
	if len(proxyUrl) > 0 {
 | 
						|
 | 
						|
		if socksDialer == nil {
 | 
						|
			socksDialer = fasthttpproxy.FasthttpSocksDialer(strings.TrimPrefix(proxyUrl, proxyScheme+"://"))
 | 
						|
			fastHttpClient.Dial = socksDialer
 | 
						|
		}
 | 
						|
	}
 | 
						|
	req := fasthttp.AcquireRequest()
 | 
						|
	resp := fasthttp.AcquireResponse()
 | 
						|
	defer func() {
 | 
						|
		fasthttp.ReleaseRequest(req)
 | 
						|
		fasthttp.ReleaseResponse(resp)
 | 
						|
	}()
 | 
						|
 | 
						|
	for k, v := range headers {
 | 
						|
		req.Header.Set(k, v)
 | 
						|
	}
 | 
						|
	req.Header.SetMethod(reqMethod)
 | 
						|
	req.SetRequestURI(reqUrl)
 | 
						|
	req.SetBodyString(postData)
 | 
						|
 | 
						|
	err := fastHttpClient.Do(req, resp)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
 | 
						|
	if resp.StatusCode() != 200 {
 | 
						|
		return nil, errors.New(fmt.Sprintf("HttpStatusCode:%d ,Desc:%s", resp.StatusCode(), string(resp.Body())))
 | 
						|
	}
 | 
						|
	return resp.Body(), nil
 | 
						|
}
 | 
						|
 | 
						|
func HttpGet(reqUrl string) (map[string]interface{}, error) {
 | 
						|
	respData, err := NewHttpRequestWithFasthttp("GET", reqUrl, "", nil)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
 | 
						|
	var bodyDataMap map[string]interface{}
 | 
						|
	err = sonic.Unmarshal(respData, &bodyDataMap)
 | 
						|
	if err != nil {
 | 
						|
		log.Println(string(respData))
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
	return bodyDataMap, nil
 | 
						|
}
 | 
						|
 | 
						|
func HttpGet2(reqUrl string, headers map[string]string) (map[string]interface{}, error) {
 | 
						|
	if headers == nil {
 | 
						|
		headers = map[string]string{}
 | 
						|
	}
 | 
						|
	headers["Content-Type"] = "application/x-www-form-urlencoded"
 | 
						|
	respData, err := NewHttpRequestWithFasthttp("GET", reqUrl, "", headers)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
 | 
						|
	var bodyDataMap map[string]interface{}
 | 
						|
	err = sonic.Unmarshal(respData, &bodyDataMap)
 | 
						|
	if err != nil {
 | 
						|
		log.Println("respData", string(respData))
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
	return bodyDataMap, nil
 | 
						|
}
 | 
						|
 | 
						|
func HttpGet3(reqUrl string, headers map[string]string) ([]interface{}, error) {
 | 
						|
	if headers == nil {
 | 
						|
		headers = map[string]string{}
 | 
						|
	}
 | 
						|
	headers["Content-Type"] = "application/x-www-form-urlencoded"
 | 
						|
	respData, err := NewHttpRequestWithFasthttp("GET", reqUrl, "", headers)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
	// println(string(respData))
 | 
						|
	var bodyDataMap []interface{}
 | 
						|
	err = sonic.Unmarshal(respData, &bodyDataMap)
 | 
						|
	if err != nil {
 | 
						|
		log.Println("respData", string(respData))
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
	return bodyDataMap, nil
 | 
						|
}
 | 
						|
 | 
						|
func HttpGet4(reqUrl string, headers map[string]string, result interface{}) error {
 | 
						|
	if headers == nil {
 | 
						|
		headers = map[string]string{}
 | 
						|
	}
 | 
						|
	headers["Content-Type"] = "application/x-www-form-urlencoded"
 | 
						|
	respData, err := NewHttpRequestWithFasthttp("GET", reqUrl, "", headers)
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
 | 
						|
	err = sonic.Unmarshal(respData, result)
 | 
						|
	if err != nil {
 | 
						|
		log.Printf("HttpGet4 - jsonhelper.Unmarshal failed : %v, resp %s", err, string(respData))
 | 
						|
		return err
 | 
						|
	}
 | 
						|
 | 
						|
	return nil
 | 
						|
}
 | 
						|
 | 
						|
func HttpGet5(reqUrl string, headers map[string]string) ([]byte, error) {
 | 
						|
	if headers == nil {
 | 
						|
		headers = map[string]string{}
 | 
						|
	}
 | 
						|
	headers["Content-Type"] = "application/x-www-form-urlencoded"
 | 
						|
	respData, err := NewHttpRequestWithFasthttp("GET", reqUrl, "", headers)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
 | 
						|
	return respData, nil
 | 
						|
}
 | 
						|
 | 
						|
func HttpPostForm(reqUrl string, postData url.Values) ([]byte, error) {
 | 
						|
	headers := map[string]string{
 | 
						|
		"Content-Type": "application/x-www-form-urlencoded"}
 | 
						|
	return NewHttpRequestWithFasthttp("POST", reqUrl, postData.Encode(), headers)
 | 
						|
}
 | 
						|
 | 
						|
func HttpPostForm2(reqUrl string, postData url.Values, headers map[string]string) ([]byte, error) {
 | 
						|
	if headers == nil {
 | 
						|
		headers = map[string]string{}
 | 
						|
	}
 | 
						|
	headers["Content-Type"] = "application/x-www-form-urlencoded"
 | 
						|
	return NewHttpRequestWithFasthttp("POST", reqUrl, postData.Encode(), headers)
 | 
						|
}
 | 
						|
 | 
						|
func HttpPostForm3(reqUrl string, postData string, headers map[string]string) ([]byte, error) {
 | 
						|
	return NewHttpRequestWithFasthttp("POST", reqUrl, postData, headers)
 | 
						|
}
 | 
						|
 | 
						|
func HttpPostForm4(reqUrl string, postData map[string]string, headers map[string]string) ([]byte, error) {
 | 
						|
	if headers == nil {
 | 
						|
		headers = map[string]string{}
 | 
						|
	}
 | 
						|
	headers["Content-Type"] = "application/json"
 | 
						|
	data, _ := sonic.Marshal(postData)
 | 
						|
	return NewHttpRequestWithFasthttp("POST", reqUrl, string(data), headers)
 | 
						|
}
 | 
						|
 | 
						|
func HttpDeleteForm(reqUrl string, postData url.Values, headers map[string]string) ([]byte, error) {
 | 
						|
	if headers == nil {
 | 
						|
		headers = map[string]string{}
 | 
						|
	}
 | 
						|
	headers["Content-Type"] = "application/x-www-form-urlencoded"
 | 
						|
	return NewHttpRequestWithFasthttp("DELETE", reqUrl, postData.Encode(), headers)
 | 
						|
}
 | 
						|
 | 
						|
func HttpPut(reqUrl string, postData url.Values, headers map[string]string) ([]byte, error) {
 | 
						|
	if headers == nil {
 | 
						|
		headers = map[string]string{}
 | 
						|
	}
 | 
						|
	headers["Content-Type"] = "application/x-www-form-urlencoded"
 | 
						|
	return NewHttpRequestWithFasthttp("PUT", reqUrl, postData.Encode(), headers)
 | 
						|
}
 |