From ebd6497f7eaf0cb29001245f8d685ad1775cf193 Mon Sep 17 00:00:00 2001
From: chenshijun <csj_sky@126.com>
Date: 星期四, 20 六月 2019 10:34:28 +0800
Subject: [PATCH] first vervion
---
gb28181Api.go | 224 ++++++++++++++++++++++
client.go | 30 +++
clientFactory.go | 9
entites.go | 75 +++++++
httpClient.go | 155 +++++++++++++++
README.md | 3
api_test.go | 68 ++++++
7 files changed, 564 insertions(+), 0 deletions(-)
diff --git a/README.md b/README.md
index 8629046..6200a02 100644
--- a/README.md
+++ b/README.md
@@ -2,3 +2,6 @@
鍥芥爣28181鐨刟pi
+API:gb28181Api.go
+浼犺緭锛歨ttpClient.go
+浣跨敤鎺ュ彛鍓嶉渶瑕佹墽琛孖nit()锛屾寚瀹歩p+port
diff --git a/api_test.go b/api_test.go
new file mode 100644
index 0000000..ccd45f4
--- /dev/null
+++ b/api_test.go
@@ -0,0 +1,68 @@
+package gb28181api
+
+import (
+ "fmt"
+ "testing"
+)
+
+func TestSetPlatformServerInfo(t *testing.T) {
+ var api Gb28181Api
+ var gbserverinfo = GbServerInfo{
+ Name: "娴嬭瘯鍥芥爣骞冲彴",
+ PublicID: "44120000002000000011",
+ GbServerPort: 7060,
+ RtspServrPort: 7554,
+ HTTPClientIP: "",
+ HTTPClientPort: 0,
+ }
+ Init("192.168.1.203", 8060)
+ flag := api.SetPlatformServerInfo(gbserverinfo)
+ fmt.Println(flag)
+}
+
+func TestGetPlatformServerInfo(t *testing.T) {
+ var api Gb28181Api
+ Init("192.168.1.203", 8060)
+ gbserverinfo, flag := api.GetPlatformServerInfo()
+ fmt.Println("flag:", flag)
+ fmt.Println("gbserverinfo:", SmartPrintStruct(gbserverinfo))
+}
+
+func TestGetDevicesByPageNO(t *testing.T) {
+ var api Gb28181Api
+ Init("192.168.1.203", 8060)
+ devsinfo, flag := api.GetDevicesByPageNO(1)
+ fmt.Println("flag:", flag)
+ fmt.Println("devsinfo:", SmartPrintStruct(devsinfo))
+}
+
+func TestGetAllDevices(t *testing.T) {
+ var api Gb28181Api
+ Init("192.168.1.203", 8060)
+ alldevsinfo, flag := api.GetAllDevices()
+ fmt.Println("flag:", flag)
+ fmt.Println("alldevsinfo:", SmartPrintStruct(alldevsinfo))
+}
+
+func TestGetCamsByDevAndPage(t *testing.T) {
+ var api Gb28181Api
+ Init("192.168.1.203", 8060)
+ camsinfo, flag := api.GetCamsByDevAndPage("44122500042001000123", "all", 1)
+ fmt.Println("flag:", flag)
+ fmt.Println("camsinfo:", SmartPrintStruct(camsinfo))
+}
+
+func TestGetAllCamerasByDevID(t *testing.T) {
+ var api Gb28181Api
+ Init("192.168.1.203", 8060)
+ allcamsinfo, flag := api.GetAllCamerasByDevID("44122500042001000123")
+ fmt.Println("flag:", flag)
+ fmt.Println("allcamsinfo:", SmartPrintStruct(allcamsinfo))
+}
+
+func TestSetCameraPtz(t *testing.T) {
+ var api Gb28181Api
+ Init("192.168.1.203", 8060)
+ flag := api.SetCameraPtz("11010202081314000004", "focusnear", 150)
+ fmt.Println("flag:", flag)
+}
diff --git a/client.go b/client.go
new file mode 100644
index 0000000..9ececca
--- /dev/null
+++ b/client.go
@@ -0,0 +1,30 @@
+package gb28181api
+
+import (
+ "strconv"
+)
+
+type Client interface {
+ //GET
+ DoGetRequest(url string, params map[string]string, headers map[string]string) ([]byte, error)
+ //POST
+ DoPostRequest(url string, contentType string, body map[string]interface{}, params map[string]string, headers map[string]string) ([]byte, error)
+ //PUT
+ DoPutRequest(url string, contentType string, body map[string]interface{}, headers map[string]string) ([]byte, error)
+ //DELETE
+ DoDeleteRequest(url string, contentType string, body map[string]interface{}, headers map[string]string) ([]byte, error)
+}
+
+var BASIC_URL = "http://192.168.1.203:8060"
+
+const (
+ DATA_URL_PREFIX = "/vssconfig"
+ CONTENT_TYPE_FORM = "application/x-www-form-urlencoded"
+ CONTENT_TYPE_MULFORM = "multipart/form-data"
+ CONTENT_TYPE_JSON = "application/json"
+)
+
+//鍒濆鍖杁bserver鐨勫湴鍧�鍜岀鍙�
+func Init(ip string, port int) {
+ BASIC_URL = "http://" + ip + ":" + strconv.Itoa(port)
+}
diff --git a/clientFactory.go b/clientFactory.go
new file mode 100644
index 0000000..1cc67ca
--- /dev/null
+++ b/clientFactory.go
@@ -0,0 +1,9 @@
+package gb28181api
+
+//Factory new client
+func NewClient() Client {
+ var client Client
+ client = &HttpClient{}
+ //client = &ReqRepClient{}
+ return client
+}
diff --git a/entites.go b/entites.go
new file mode 100644
index 0000000..daf3d57
--- /dev/null
+++ b/entites.go
@@ -0,0 +1,75 @@
+package gb28181api
+
+//GbServerInfo 鍥芥爣骞冲彴淇℃伅
+type GbServerInfo struct {
+ Name string `json:"name"` //鍥芥爣骞冲彴鐨勫悕绉�
+ PublicID string `json:"publicid"` //鍥芥爣骞冲彴鐨�20浣岻D 锛�200绫诲瀷锛�
+ GbServerPort int `json:"gbserverport"` //鍥芥爣骞冲彴鐩戝惉鐨勭鍙�
+ RtspServrPort int `json:"rtspservrport"` //RTSP鏈嶅姟鐨勭鍙�
+ HTTPClientIP string `json:"httpclientip"` //HTTP瀹㈡埛绔殑ip锛堢敤浜庢姤璀﹂�氱煡锛屼竴鑸笉璁剧疆锛�
+ HTTPClientPort int `json:"httpclientport"` //HTTP瀹㈡埛绔殑绔彛锛堢敤浜庢姤璀﹂�氱煡锛屼竴鑸笉璁剧疆锛�
+}
+
+//GbResult 杩斿洖鍊间俊鎭�
+type GbResult struct {
+ ErrCode int `json:"errcode"`
+ ErrDesc string `json:"errdesc"`
+}
+
+//DeviceInfo 涓嬬骇璁惧淇℃伅
+type DeviceInfo struct {
+ PublicID string `json:"publicid"` //(瀛楃涓�) 鍥芥爣璁惧20浣峣d
+ Name string `json:"name"` //(瀛楃涓�) 璧勬簮鍚嶇О
+ Alive int `json:"alive"` //(鏁板瓧) 鐘舵�� 0锛氫笉鍦ㄧ嚎 1锛氬湪绾�
+ Corp string `json:"corp"` //(瀛楃涓�) 鍘傚晢
+ Parentid string `json:"parentid"` //(瀛楃涓�) 鐖惰妭鐐筰d
+ IP string `json:"ip"` //(瀛楃涓�) ip鍦板潃
+ Port int `json:"port"` //(鏁板瓧) 绔彛
+ Username string `json:"username"` //(瀛楃涓�) 璁惧娉ㄥ唽鐢ㄦ埛鍚�
+ Passwd string `json:"passwd"` //(瀛楃涓�) 璁惧娉ㄥ唽瀵嗙爜
+ Devmode string `json:"devmode"` //(瀛楃涓�) 璁惧绫诲瀷
+}
+
+//DevicesInOnePage 涓�椤电殑涓嬬骇璁惧淇℃伅
+type DevicesInOnePage struct {
+ GbResult
+ TotalSize int `json:"totalsize"` //(鏁板瓧) 璁惧鎬绘暟 锛堜笅鍚岋級
+ OnePageSize int `json:"onepagesize"` //(鏁板瓧) 姣忛〉澶у皬 锛堜笅鍚岋級
+ TotalPage int `json:"totalpage"` //(鏁板瓧) 鎬诲垎椤垫暟 锛堜笅鍚岋級
+ PageNO int `json:"pageno"` //(鏁板瓧) 褰撳墠绗嚑椤碉紙涓嬪悓锛�
+ Count int `json:"count"` //(鏁板瓧) 褰撳墠鏈夊嚑鏉℃暟鎹紙涓嬪悓锛�
+ Data []DeviceInfo `json:"data"` //璁惧淇℃伅锛屽弬鐓р��1.璁惧绠$悊鈥濆畾涔�
+}
+
+//CameraInfo 鎽勫儚鏈轰俊鎭�
+type CameraInfo struct {
+ ResType int `json:"restype"` //(鏁板瓧) 1-閫氶亾璧勬簮 2-璧勬簮缁�
+ PublicID string `json:"publicid"` //(瀛楃涓�) 鍥芥爣璧勬簮閫氶亾20浣峣d 锛堢敤浜庤姹傝棰戙�佹帶鍒剁瓑鎿嶄綔锛�
+ Name string `json:"name"` //(瀛楃涓�) 璧勬簮鍚嶇О
+ Alive int `json:"alive"` //(鏁板瓧) 鐘舵�� 0锛氫笉鍦ㄧ嚎 1锛氬湪绾�
+ Corp string `json:"corp"` //(瀛楃涓�) 鍘傚晢
+ Model string `json:"model"` //(瀛楃涓�) 璁惧绫诲瀷
+ Owner string `json:"owner"` //(瀛楃涓�) 璁惧褰掑睘
+ CivilCode string `json:"civilcode"` //(瀛楃涓�) 琛屾斂鍖哄煙 锛堝彲浠ユ寜鐓ц鏀垮尯鍩熻繘琛屽垝鍒嗚祫婧愮粍锛�
+ Address string `json:"address"` //(瀛楃涓�) 鍦板潃
+ DevPubID string `json:"devpubid"` //(瀛楃涓�) 閫氶亾鐨勮澶噄d
+ ParentID string `json:"parentid"` //(瀛楃涓�) 鐖惰妭鐐筰d
+ IP string `json:"ip"` //(瀛楃涓�) ip鍦板潃
+ Port int `json:"port"` //(鏁板瓧) 绔彛
+ Longitude float64 `json:"longitude"` //(鏁板瓧) 缁忓害
+ Latitude float64 `json:"latitude"` //(鏁板瓧) 绾害
+ PtzType int `json:"ptztype"` //(鏁板瓧) 鎺у埗绫诲瀷 1-鐞冩満锛�2-鍗婄悆锛�3-鍥哄畾鏋満锛�4-閬ユ帶鏋満锛�
+ StreamType int `json:"streamtype"` //(鏁板瓧) 鐮佹祦绫诲瀷 0-H264锛�1-MPEG2锛�2-MPEG4锛�3-SVAC锛�4-3GP锛�5-H265锛�
+ RealRtspURL string `json:"realrtspurl"` //(瀛楃涓�) 瀹炴椂瑙嗛鐨剅tsp鍦板潃
+}
+
+//CamerasInOnePage 涓�椤电殑鎽勫儚鏈轰俊鎭�
+type CamerasInOnePage struct {
+ GbResult
+ TotalSize int `json:"totalsize"` //(鏁板瓧) 璁惧鎬绘暟 锛堜笅鍚岋級
+ OnePageSize int `json:"onepagesize"` //(鏁板瓧) 姣忛〉澶у皬 锛堜笅鍚岋級
+ TotalPage int `json:"totalpage"` //(鏁板瓧) 鎬诲垎椤垫暟 锛堜笅鍚岋級
+ PageNO int `json:"pageno"` //(鏁板瓧) 褰撳墠绗嚑椤碉紙涓嬪悓锛�
+ Count int `json:"count"` //(鏁板瓧) 褰撳墠鏈夊嚑鏉℃暟鎹紙涓嬪悓锛�
+ Data []CameraInfo `json:"data"` //璁惧淇℃伅锛屽弬鐓р��1.璁惧绠$悊鈥濆畾涔�
+}
diff --git a/gb28181Api.go b/gb28181Api.go
new file mode 100644
index 0000000..4093c7b
--- /dev/null
+++ b/gb28181Api.go
@@ -0,0 +1,224 @@
+package gb28181api
+
+import (
+ "bytes"
+ "encoding/json"
+ "fmt"
+ "strconv"
+)
+
+func SmartPrintStruct(src interface{}) string {
+ b, err := json.Marshal(src)
+ if err != nil {
+ return fmt.Sprintf("%+v", src)
+ }
+ var out bytes.Buffer
+ err = json.Indent(&out, b, "", " ")
+ if err != nil {
+ return fmt.Sprintf("%+v", src)
+ }
+ return out.String()
+}
+
+type Gb28181Api struct{}
+
+//SetPlatformServerInfo 璁剧疆鏈嶅姟鍣ㄤ俊鎭�
+func (api Gb28181Api) SetPlatformServerInfo(serverInfo GbServerInfo) bool {
+ url := BASIC_URL + DATA_URL_PREFIX + "/set_platform_server"
+ client := NewClient()
+
+ paramBody := make(map[string]string, 0)
+ paramBody["gbsvrid"] = serverInfo.PublicID
+ paramBody["gbsvrport"] = strconv.Itoa(serverInfo.GbServerPort)
+ paramBody["gbsvrname"] = serverInfo.Name
+ paramBody["rtspsvrport"] = strconv.Itoa(serverInfo.RtspServrPort)
+
+ // fmt.Println("url:", url)
+ body, err := client.DoGetRequest(url, paramBody, nil)
+ if err != nil {
+ return false
+ }
+
+ var res GbResult
+ // fmt.Println("body", string(body))
+ if err = json.Unmarshal(body, &res); err != nil {
+ fmt.Println("jsonErr:", err)
+ return false
+ }
+
+ if res.ErrCode != 0 {
+ fmt.Println("errcode: ", res.ErrCode, " errdesc: ", res.ErrDesc)
+ return false
+ }
+
+ return true
+}
+
+type retGbServerInfo struct {
+ GbServerInfo
+ GbResult
+}
+
+//GetPlatformServerInfo 鑾峰彇鏈嶅姟鍣ㄤ俊鎭�
+func (api Gb28181Api) GetPlatformServerInfo() (GbServerInfo, bool) {
+ url := BASIC_URL + DATA_URL_PREFIX + "/get_platform_server"
+ client := NewClient()
+
+ var info GbServerInfo
+ body, err := client.DoGetRequest(url, nil, nil)
+ if err != nil {
+ fmt.Println("err:", err)
+ return info, false
+ }
+
+ //瑙f瀽retGbServerInfo
+ var res retGbServerInfo
+ if err = json.Unmarshal(body, &res); err != nil {
+ fmt.Println("jsonErr:", err)
+ return info, false
+ }
+ if res.ErrCode != 0 {
+ fmt.Println("errcode: ", res.ErrCode, " errdesc: ", res.ErrDesc)
+ return info, false
+ }
+
+ return res.GbServerInfo, true
+}
+
+//GetDevicesByPageNO 鎸夐〉鑾峰彇涓嬬骇璁惧锛堝钩鍙版垨鎽勫儚鏈猴級鍒楄〃
+//pageNo (鏁板瓧) 鎸囧畾鑾峰彇绗嚑椤碉紝绗竴娆′负1锛岃繑鍥炴�婚〉鏁帮紝鎬绘潯鏁扮瓑锛屽啀鏍规嵁杩欎簺淇℃伅鍘诲啀娆℃煡璇紝鐩村埌鍙栧畬鍏ㄩ儴
+func (api Gb28181Api) GetDevicesByPageNO(pageNo int) (DevicesInOnePage, bool) {
+ url := BASIC_URL + DATA_URL_PREFIX + "/get_all_device/" + strconv.Itoa(pageNo)
+ client := NewClient()
+
+ var devicesPerPage DevicesInOnePage
+ body, err := client.DoGetRequest(url, nil, nil)
+ if err != nil {
+ fmt.Println("err:", err)
+ return devicesPerPage, false
+ }
+
+ //瑙f瀽 DevicesInOnePage
+ if err = json.Unmarshal(body, &devicesPerPage); err != nil {
+ fmt.Println("jsonErr:", err)
+ return devicesPerPage, false
+ }
+ if devicesPerPage.ErrCode != 0 {
+ fmt.Println("errcode: ", devicesPerPage.ErrCode, " errdesc: ", devicesPerPage.ErrDesc)
+ return devicesPerPage, false
+ }
+
+ return devicesPerPage, true
+}
+
+//GetAllDevices 鑾峰彇鍏ㄩ儴涓嬬骇璁惧锛堝钩鍙版垨鎽勫儚鏈猴級淇℃伅鍒楄〃
+func (api Gb28181Api) GetAllDevices() ([]DeviceInfo, bool) {
+ var deviceSlice []DeviceInfo
+ devicesPerPage, flag := api.GetDevicesByPageNO(1)
+ if !flag {
+ fmt.Println("GetDevicesByPageNO Error, deviceSlice is nil")
+ return deviceSlice, false
+ }
+ deviceSlice = devicesPerPage.Data
+
+ for i := 1; i < devicesPerPage.TotalPage; i++ {
+ devicesPerPage, flag := api.GetDevicesByPageNO(i + 1)
+ if !flag {
+ fmt.Println("GetDevicesByPageNO Error,pageno:" + strconv.Itoa(i+1) + " ,deviceSlice is not completed")
+ return deviceSlice, false
+ }
+ deviceSlice = append(deviceSlice, devicesPerPage.Data...)
+ }
+
+ return deviceSlice, true
+}
+
+//GetCamsByDevAndPage 鎸夐〉鑾峰彇涓嬬骇璁惧鐨勬憚鍍忔満鍒楄〃
+//devID (瀛楃涓�) 娉ㄥ唽鐨勮澶囩殑20浣峣d
+//pageNo (鏁板瓧) 鎸囧畾鑾峰彇绗嚑椤碉紝绗竴娆′负1锛岃繑鍥炴�婚〉鏁帮紝鎬绘潯鏁扮瓑锛屽啀鏍规嵁杩欎簺淇℃伅鍘诲啀娆℃煡璇紝鐩村埌鍙栧畬鍏ㄩ儴
+//srcType (瀛楃涓�) "all"-琛ㄧず鑾峰彇璁惧鐨勬墍鏈夎祫婧� "node"-鐖惰妭鐐逛笅鐨勭涓�绾ц祫婧�
+//娉ㄦ剰锛氭牴鎹�"restype"瀛楁锛屽拷鐣ヨ祫婧愮粍锛屽彧淇濈暀閫氶亾璧勬簮------"restype"锛�(鏁板瓧)1-閫氶亾璧勬簮 2-璧勬簮缁�
+func (api Gb28181Api) GetCamsByDevAndPage(devID string, srcType string, pageNo int) (CamerasInOnePage, bool) {
+ url := BASIC_URL + DATA_URL_PREFIX + "/get_all_channel/" + devID + "/" + srcType + "/" + strconv.Itoa(pageNo)
+ client := NewClient()
+
+ var camerasPerPage CamerasInOnePage
+ body, err := client.DoGetRequest(url, nil, nil)
+ if err != nil {
+ fmt.Println("err:", err)
+ return camerasPerPage, false
+ }
+
+ //瑙f瀽 CamerasInOnePage
+ if err = json.Unmarshal(body, &camerasPerPage); err != nil {
+ fmt.Println("jsonErr:", err)
+ return camerasPerPage, false
+ }
+ if camerasPerPage.ErrCode != 0 {
+ fmt.Println("errcode: ", camerasPerPage.ErrCode, " errdesc: ", camerasPerPage.ErrDesc)
+ return camerasPerPage, false
+ }
+
+ if len(camerasPerPage.Data) > 0 {
+ for i, v := range camerasPerPage.Data {
+ if v.ResType == 2 {
+ fmt.Println("v.restype == 2")
+ camerasPerPage.Data = append(camerasPerPage.Data[:i], camerasPerPage.Data[i+1:]...)
+ }
+ }
+ }
+
+ return camerasPerPage, true
+}
+
+//GetAllCamerasByDevID 鑾峰彇鍏ㄩ儴涓嬬骇璁惧鐨勬憚鍍忔満鍒楄〃
+//devID (瀛楃涓�) 娉ㄥ唽鐨勮澶囩殑20浣峣d
+func (api Gb28181Api) GetAllCamerasByDevID(devID string) ([]CameraInfo, bool) {
+ var cameraSlice []CameraInfo
+ camerasPerPage, flag := api.GetCamsByDevAndPage(devID, "all", 1)
+ if !flag {
+ fmt.Println("GetCamsByDevAndPage Error, deviceSlice is nil")
+ return cameraSlice, false
+ }
+ cameraSlice = camerasPerPage.Data
+
+ for i := 1; i < camerasPerPage.TotalPage; i++ {
+ camerasPerPage, flag := api.GetCamsByDevAndPage(devID, "all", i+1)
+ if !flag {
+ fmt.Println("GetCamsByDevAndPage Error! devID:" + devID + ",type:all,pageno:" + strconv.Itoa(i+1) + " ,cameraSlice is not completed")
+ return cameraSlice, false
+ }
+ cameraSlice = append(cameraSlice, camerasPerPage.Data...)
+ }
+
+ return cameraSlice, true
+}
+
+//SetCameraPtz 2.3 PTZ浜戝彴鎺у埗
+//"channelid": (瀛楃涓�) 閫氶亾20浣嶇紪鍙�
+//"ptztype"锛� (瀛楃涓�) 鎺у埗绫诲瀷锛氫笂"up",涓�"down",宸�"left",鍙�"right",宸︿笂"leftup",宸︿笅"leftdown",鍙充笂"rightup",鍙充笅"rightdown",闀滃ご杩�"zoomin",闀滃ご杩�"zoomout",
+// 鐒﹁窛杩�"focusfar",鐒﹁窛杩�"focusnear", 璁剧疆棰勭疆浣�"setpos",璋冮缃綅"callpos",鍋滄"stop"
+//"ptzparam": (鏁板瓧) 鍙傛暟锛岄�熷害鑼冨洿涓�1-255
+func (api Gb28181Api) SetCameraPtz(chanID string, ptzType string, ptzParam int) bool {
+ url := BASIC_URL + "/vss/ptz/" + ptzType + "/" + strconv.Itoa(ptzParam) + "/" + chanID
+ client := NewClient()
+
+ body, err := client.DoGetRequest(url, nil, nil)
+ if err != nil {
+ fmt.Println("err:", err)
+ return false
+ }
+
+ //瑙f瀽 CamerasInOnePage
+ var res GbResult
+ if err = json.Unmarshal(body, &res); err != nil {
+ fmt.Println("jsonErr:", err)
+ return false
+ }
+ if res.ErrCode != 0 {
+ fmt.Println("errcode: ", res.ErrCode, " errdesc: ", res.ErrDesc)
+ return false
+ }
+
+ return true
+}
diff --git a/httpClient.go b/httpClient.go
new file mode 100644
index 0000000..83d07c9
--- /dev/null
+++ b/httpClient.go
@@ -0,0 +1,155 @@
+package gb28181api
+
+import (
+ "bytes"
+ "encoding/json"
+ "io/ioutil"
+ "log"
+ "net/http"
+)
+
+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
+ 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 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
+}
+
+//鏋勯�爌ut璇锋眰
+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
+}
+
+//鏋勯�燿elete璇锋眰
+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
+}
--
Gitblit v1.8.0