package bhomedbapi import ( "bytes" "encoding/json" "io/ioutil" "log" "net/http" "strings" "github.com/ajg/form" ) type HttpClient struct{} //发起GET请求 func (httpApi HttpClient) DoGetRequest(url string, params map[string]string, headers map[string]string) ([]byte, error) { var body []byte request, err := http.NewRequest("GET", url, nil) if err != nil { return body, err } // add params query := request.URL.Query() if params != nil { for key, val := range params { query.Add(key, val) } request.URL.RawQuery = query.Encode() } // add headers if headers != nil { for key, val := range headers { request.Header.Add(key, val) } } client := &http.Client{} resp, err := client.Do(request) if err != nil { return body, err } defer resp.Body.Close() body, err = ioutil.ReadAll(resp.Body) if err != nil { return body, err } return body, nil } //发起POST请求 func (httpApi HttpClient) DoPostRequest(url string, contentType string, body map[string]interface{}, params map[string]string, headers map[string]string) ([]byte, error) { var resultBytes []byte var request *http.Request var err error if contentType == CONTENT_TYPE_FORM || contentType == CONTENT_TYPE_MULFORM { formData,err := form.EncodeToString(body) if err !=nil { return resultBytes,err } request, err = http.NewRequest("POST",url,strings.NewReader(formData)) if err !=nil { return resultBytes,err } } else { var bodyJson []byte if body != nil { var err error bodyJson, err = json.Marshal(body) if err != nil { return resultBytes, err } } request, err = http.NewRequest("POST", url, bytes.NewBuffer(bodyJson)) if err != nil { return resultBytes, err } } request.Header.Set("Content-type", contentType) //add params q := request.URL.Query() if params != nil { for key, val := range params { q.Add(key, val) } request.URL.RawQuery = q.Encode() } // add headers if headers != nil { for key, val := range headers { request.Header.Add(key, val) } } client := &http.Client{} resp, err := client.Do(request) if err != nil { return resultBytes, err } defer resp.Body.Close() resultBytes, err = ioutil.ReadAll(resp.Body) if err != nil { return resultBytes, err } return resultBytes, nil } //构造put请求 func (httpApi HttpClient) DoPutRequest(url string, contentType string, body map[string]interface{}, headers map[string]string) ([]byte, error) { var resultBytes []byte var bodyJson []byte if body != nil { var err error bodyJson, err = json.Marshal(body) if err != nil { return resultBytes, err } } request, err := http.NewRequest("PUT", url, bytes.NewBuffer(bodyJson)) if err != nil { log.Println(err) return resultBytes, err } request.Header.Set("Content-type", contentType) // add headers if headers != nil { for key, val := range headers { request.Header.Add(key, val) } } client := &http.Client{} resp, err := client.Do(request) if err != nil { return resultBytes, err } defer resp.Body.Close() resultBytes, err = ioutil.ReadAll(resp.Body) if err != nil { return resultBytes, err } return resultBytes, nil } //构造delete请求 func (httpApi HttpClient) DoDeleteRequest(url string, contentType string, body map[string]interface{}, headers map[string]string) ([]byte, error) { var resultBytes []byte var bodyJson []byte if body != nil { var err error bodyJson, err = json.Marshal(body) if err != nil { return resultBytes, err } } request, err := http.NewRequest("DELETE", url, bytes.NewBuffer(bodyJson)) if err != nil { log.Println(err) return resultBytes, err } request.Header.Set("Content-type", contentType) // add headers if headers != nil { for key, val := range headers { request.Header.Add(key, val) } } client := &http.Client{} resp, err := client.Do(request) if err != nil { return resultBytes, err } defer resp.Body.Close() resultBytes, err = ioutil.ReadAll(resp.Body) if err != nil { return resultBytes, err } return resultBytes, nil }