// // http_helper.go // Copyright (C) 2023 tiglog // // Distributed under terms of the MIT license. // package helper import ( "bytes" "encoding/json" "errors" "io" "net/http" "net/url" ) // 比较完整的 get 实现 func RequestGet(uri string, vals url.Values, headers map[string]string) ([]byte, error) { furl, err := url.Parse(uri) if err != nil { return nil, err } if furl.RawQuery != "" { furl.RawQuery += "&" + vals.Encode() } else { furl.RawQuery = vals.Encode() } req, err := http.NewRequest("GET", furl.String(), nil) if err != nil { return nil, err } for hd, val := range headers { req.Header.Set(hd, val) } client := &http.Client{} resp, err := client.Do(req) if err != nil { return nil, err } defer resp.Body.Close() body, err := io.ReadAll(resp.Body) if err != nil { return nil, err } return body, nil } // 默认是 json 请求 func RequestPost(url string, data map[string]any, headers map[string]string) ([]byte, error) { bd, err := json.Marshal(data) if err != nil { return nil, err } req, err := http.NewRequest("POST", url, bytes.NewBuffer(bd)) if err != nil { return nil, err } if len(headers) == 0 { headers["Content-Type"] = "application/json" } for hd, val := range headers { req.Header.Set(hd, val) } client := &http.Client{} resp, err := client.Do(req) if err != nil { return nil, err } body, err := io.ReadAll(resp.Body) if err != nil { return nil, err } return body, nil } // 旧的方法,不建议使用 func RequestJson(url string, data []byte) (*http.Response, error) { res, err := http.Post(url, "application/json", bytes.NewBuffer(data)) if err != nil { return nil, err } return res, nil } func NotifyBack(url string, vals map[string]any, errmsg string) (*http.Response, error) { if url == "" { return nil, errors.New("no url") } vals["msg"] = errmsg if errmsg == "" { vals["stat"] = "ok" } else { vals["stat"] = "fail" } body, _ := json.Marshal(vals) res, err := http.Post(url, "application/json", bytes.NewReader(body)) if err != nil { return nil, err } return res, nil }