sqlite的api,便于内部使用
liuxiaolong
2020-06-23 da4c92f310f5e856fc7a37056616990ceac2e098
httpClient.go
@@ -1,49 +1,176 @@
package dbapi
import (
   "bytes"
   "encoding/json"
   "fmt"
   "io/ioutil"
   "log"
   "net/http"
   "strings"
   "time"
   "github.com/ajg/form"
)
type DbApi struct{}
type HttpClient struct{}
const (
   BASIC_URL = "http://192.168.1.182:8000"
)
//通过cameraId获取摄像机信息
func (api DbApi) GetCameraById(cameraId string) (result Camera, err error) {
   url := BASIC_URL + "/data/api-v/camera/show/" + cameraId
   request, err := http.NewRequest("GET", url, strings.NewReader(cameraId))
//发起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 result, err
      return body, err
   }
   request.Header.Add("Content-Type", "application/json")
   timeout := time.Duration(5 * time.Second) //超时时间50ms
   client := &http.Client{Timeout: timeout}
   // 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 result, err
      return body, err
   }
   defer resp.Body.Close()
   body, err := ioutil.ReadAll(resp.Body)
   body, err = ioutil.ReadAll(resp.Body)
   if err != nil {
      return result, err
      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
      }
   }
   var res Result
   if err = json.Unmarshal(body, &res); err != nil {
      fmt.Println(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
}
   bytes, _ := json.Marshal(res.Data)
   err = json.Unmarshal(bytes, &result)
//构造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
}
   return result, err
//构造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
}