github.com/iEvan-lhr/exciting-tool@v0.0.0-20230504054234-8e983f73cdd2/http.go (about)

     1  package tools
     2  
     3  import (
     4  	"io"
     5  	"net/http"
     6  	"reflect"
     7  	"strings"
     8  )
     9  
    10  // Do 用于执行标准的请求方法,默认设置的header如下
    11  // header.Set("Accept", "*/*")
    12  // header.Set("Accept-Language", "zh-CN,zh;q=0.9")
    13  // header.Set("Connection", "keep-alive")
    14  // header.Set("Content-Type", "application/json")
    15  // header.Set("User-Agent", "PostmanRuntime/7.28.4")
    16  func Do(url string, args ...interface{}) *String {
    17  	if len(args) <= 0 {
    18  		return get(url, nil)
    19  	} else {
    20  		return post(url, args[0].(string), nil)
    21  	}
    22  }
    23  
    24  // DoReq 用于执行需要自定义client的请求方法,例如使用https 可以设置信任证书等等 入参可选传入client 传入多个将拼接多次的执行结果
    25  func DoReq(r *http.Request, client ...*http.Client) *String {
    26  	if len(client) > 0 {
    27  		result := Make()
    28  		for i := range client {
    29  			result.appendAny(ReturnValueByTwo(io.ReadAll(ReturnValueByTwo(client[i].Do(r)).(*http.Response).Body)))
    30  		}
    31  		return result
    32  	}
    33  	return Make(ReturnValueByTwo(io.ReadAll(ReturnValueByTwo((&http.Client{}).Do(r)).(*http.Response).Body)))
    34  }
    35  
    36  // DoUseHeader 用于执行自定义header的请求方法 入参为请求地址、header、body及其他参数
    37  // 允许header为nil 将会使用默认的header
    38  func DoUseHeader(url string, header http.Header, args ...interface{}) *String {
    39  	if len(args) <= 0 {
    40  		return get(url, header)
    41  	} else {
    42  		return post(url, args[0].(string), header)
    43  	}
    44  }
    45  
    46  // UnMarshal 用于从request中解析参数
    47  // Deprecated: 若使用iEvan-lhr/worker 构建request , 推荐使用 MarshalReq.
    48  func UnMarshal(r *http.Request, v interface{}) interface{} {
    49  	Unmarshal(ReturnValueByTwo(io.ReadAll(r.Body)), reflect.ValueOf(v).Interface())
    50  	return v
    51  }
    52  
    53  // MarshalReq 用于从request中解析参数
    54  func MarshalReq(r []any, v interface{}) interface{} {
    55  	Unmarshal(ReturnValueByTwo(io.ReadAll(r[0].(*http.Request).Body)), reflect.ValueOf(v).Interface())
    56  	return v
    57  }
    58  
    59  // get 底层方法 用于发送get请求
    60  func get(url string, header http.Header) *String {
    61  	request, err := http.NewRequest("GET", url, nil)
    62  	if err != nil {
    63  		panic(err)
    64  	}
    65  	if header == nil {
    66  		request.Header = headerPublic()
    67  	} else {
    68  		request.Header = header
    69  	}
    70  	return Make(ReturnValueByTwo(io.ReadAll(ReturnValueByTwo((&http.Client{}).Do(request)).(*http.Response).Body)))
    71  }
    72  
    73  // post 底层方法 用于发送post请求
    74  func post(url, body string, header http.Header) *String {
    75  	request, err := http.NewRequest("POST", url, strings.NewReader(body))
    76  	if err != nil {
    77  		panic(err)
    78  	}
    79  	if header == nil {
    80  		request.Header = headerPublic()
    81  	} else {
    82  		request.Header = header
    83  	}
    84  	return Make(ReturnValueByTwo(io.ReadAll(ReturnValueByTwo((&http.Client{}).Do(request)).(*http.Response).Body)))
    85  }
    86  
    87  // headerPublic 设置标准请求头
    88  func headerPublic() http.Header {
    89  	header := http.Header{}
    90  	header.Set("Accept", "*/*")
    91  	header.Set("Accept-Language", "zh-CN,zh;q=0.9")
    92  	header.Set("Connection", "keep-alive")
    93  	header.Set("Content-Type", "application/json")
    94  	header.Set("User-Agent", "PostmanRuntime/7.28.4")
    95  	return header
    96  }