介绍

这篇文章给大家介绍使用golang语言怎么对http请求进行封装,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

在GOPATH中创建跑龙套文件夹放置这两个文件

http。去

package  utils    import  (   ,“加密/tls"   ,“编码/json"   ,“errors"   ,“fmt"   ,“io/ioutil"   ,“;net/http"   ,“;net/url"   ,“strings"   ,“sync"   ),   var  (=,GET_METHOD “GET"=,POST_METHOD “POST"=,SENDTYPE_FROM “from"=,SENDTYPE_JSON “json"   ),   type  HttpSend  struct  {   ,Link 字符串   SendType 字符串   Header  map [string]字符串   ,Body  map [string]字符串   ,sync.RWMutex   },   func  NewHttpSend (link 字符串),* HttpSend  {   ,return , HttpSend {   链接:,,才能链接,   ,,SendType: SENDTYPE_FROM,   ,}   },   func  (h  * HttpSend), SetBody (body  map [string]字符串),{   ,h.Lock ()   ,defer  h.Unlock ()   h.Body =,身体   },   func  (h  * HttpSend), SetHeader (header  map [string]字符串),{   ,h.Lock ()   ,defer  h.Unlock ()   h.Header =,头   },   func  (h  * HttpSend), SetSendType (send_type 字符串),{   ,h.Lock ()   ,defer  h.Unlock ()=,h.SendType  send_type   },   func  (h  * HttpSend),有(),([]字节,,错误),{   ,return  h.send (GET_METHOD)   },   func  (h  * HttpSend), Post(),([]字节,,错误),{   ,return  h.send (POST_METHOD)   },   字符串,func  GetUrlBuild (link  data  map [string]字符串),string  {   ,u, _ :=, url.Parse(链接)   ,q :=, u.Query ()   ,for  k, v :=, range  data  {   q.Set才能(k, v)   ,}=,,u.RawQuery  q.Encode ()   ,return  u.String ()   },   func  (h  * HttpSend),发送(method 字符串),([]字节,,错误),{   ,var  (   req 才能;* http.Request   resp 才能;* http.Response   client  http.Client才能   send_data 才能;字符串   err 才能;错误   ,)   ,if  len (h.Body),祝辞,0,{   if 才能strings.ToLower (h.SendType),==, SENDTYPE_JSON  {   ,,,json_err  send_body:=, json.Marshal (h.Body)   ,,if  json_err  !=, nil  {   ,,,return  nil, json_err   ,,}   ,,send_data =,字符串(send_body)   ,,},{else    ,,send_body :=, http.Request {}   ,,send_body.ParseForm ()   ,,for  k, v :=, range  h.Body  {   ,,,send_body.Form.Add (k, v)   ,,}   ,,send_data =, send_body.Form.Encode ()   ,,}   }大敌;   ,//忽略https的证书=,client.Transport , http.Transport {   TLSClientConfig才能:,,tls.Config} {InsecureSkipVerify:如此,   }大敌;   ,点播,err =, http.NewRequest(方法,h.Link,, strings.NewReader (send_data))   ,if  err  !=, nil  {   return 才能nil,犯错   ,}   ,defer  req.Body.Close ()   ,   ,//设置默认头   ,if  len (h.Header),==, 0, {   ,//json   if 才能strings.ToLower (h.SendType),==, SENDTYPE_JSON  {   ,,h.Header =, map [string]字符串{   ,,,“Content-Type":,“application/json; charset=utf-8",   ,,}   ,,},else {//形式   ,,h.Header =, map [string]字符串{   ,,,“Content-Type":,“应用程序/x-www-form-urlencoded"   ,,}   ,,}   }大敌;   ,for  k, v :=, range  h.Header  {   if 才能strings.ToLower (k),==,“host", {   ,,req.Host =v   ,,},{else    ,,req.Header.Add (k, v)   ,,}   }大敌;   职责的不同之处是,err =, client.Do(要求)   ,if  err  !=, nil  {   return 才能nil,犯错   ,}   ,defer  resp.Body.Close ()   ,   ,if  resp.StatusCode  !=, http.StatusOK  {   return  nil,才能,errors.New (fmt.Sprintf (“error  http  code : % d",, resp.StatusCode))   }大敌;   ,return  ioutil.ReadAll (resp.Body)   }

http_test。去

package  utils    import  (   ,“testing"   ),   func  Test_Get (t  * testing.T), {   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null