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 }