gitee.com/lh-her-team/common@v1.5.1/httputils/httputils.go (about) 1 package httputils 2 3 import ( 4 "bytes" 5 "encoding/json" 6 "fmt" 7 "io/ioutil" 8 "net/http" 9 "time" 10 ) 11 12 const ( 13 // 默认超时时间,单位:s 14 DEFAULT_TIMEOUT = 5 15 MAX_RETRY_CNT = 3 16 ) 17 18 func GET(customClient *http.Client, url string) (respData []byte, err error) { 19 var ( 20 resp *http.Response 21 ) 22 var client = customClient 23 if customClient == nil { 24 client = &http.Client{ 25 Timeout: DEFAULT_TIMEOUT * time.Second, 26 } 27 } 28 resp, err = client.Get(url) 29 if err != nil { 30 return nil, fmt.Errorf("http GET failed, %s", err.Error()) 31 } 32 defer resp.Body.Close() 33 respData, err = ioutil.ReadAll(resp.Body) 34 if err != nil { 35 return nil, fmt.Errorf("read body failed, %s", err) 36 } 37 return 38 } 39 40 func POST(customClient *http.Client, url string, reqObj interface{}) (respData []byte, err error) { 41 var ( 42 data []byte 43 req *http.Request 44 resp *http.Response 45 ) 46 data, err = json.Marshal(reqObj) 47 if err != nil { 48 return nil, fmt.Errorf("json marshal failed, %s", err.Error()) 49 } 50 req, err = http.NewRequest( 51 "POST", 52 url, 53 bytes.NewBuffer(data)) 54 if err != nil { 55 return nil, fmt.Errorf("new request failed, %s", err.Error()) 56 } 57 req.Header.Set("Content-Type", "application/json") 58 req.Header.Set("charset", "UTF-8") 59 var client = customClient 60 if customClient == nil { 61 client = &http.Client{ 62 Timeout: DEFAULT_TIMEOUT * time.Second, 63 } 64 } 65 cnt := 0 66 for { 67 resp, err = client.Do(req) 68 if err != nil { 69 cnt++ 70 if cnt <= MAX_RETRY_CNT { 71 //log.Warnf("post failed, [cur:%d|max:%d] meet err: %s, and try again", 72 // cnt, MAX_RETRY_CNT, err.Error()) 73 time.Sleep(200 * time.Millisecond) 74 continue 75 } 76 return nil, fmt.Errorf("post failed, meet too many err: %s", err.Error()) 77 } 78 break 79 } 80 defer resp.Body.Close() 81 respData, err = ioutil.ReadAll(resp.Body) 82 if err != nil { 83 return nil, fmt.Errorf("read body failed, %s", err) 84 } 85 return 86 }