博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在GOPATH 中创建 utils 文件夹 放置这两个文件
阅读量:5931 次
发布时间:2019-06-19

本文共 4168 字,大约阅读时间需要 13 分钟。

在GOPATH 中创建 utils 文件夹 放置这两个文件

http.go

package utils import (    "crypto/tls"    "encoding/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     string    SendType string    Header   map[string]string    Body     map[string]string    sync.RWMutex} func NewHttpSend(link string) *HttpSend {    return &HttpSend{        Link:     link,        SendType: SENDTYPE_FROM,    }} func (h *HttpSend) SetBody(body map[string]string) {    h.Lock()    defer h.Unlock()    h.Body = body} func (h *HttpSend) SetHeader(header map[string]string) {    h.Lock()    defer h.Unlock()    h.Header = header} func (h *HttpSend) SetSendType(send_type string) {    h.Lock()    defer h.Unlock()    h.SendType = send_type} func (h *HttpSend) Get() ([]byte, error) {    return h.send(GET_METHOD)} func (h *HttpSend) Post() ([]byte, error) {    return h.send(POST_METHOD)} func GetUrlBuild(link string, data map[string]string) string {    u, _ := url.Parse(link)    q := u.Query()    for k, v := range data {        q.Set(k, v)    }    u.RawQuery = q.Encode()    return u.String()} func (h *HttpSend) send(method string) ([]byte, error) {    var (        req       *http.Request        resp      *http.Response        client    http.Client        send_data string        err       error    )     if len(h.Body) > 0 {        if strings.ToLower(h.SendType) == SENDTYPE_JSON {            send_body, json_err := json.Marshal(h.Body)            if json_err != nil {                return nil, json_err            }            send_data = string(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: true},    }     req, err = http.NewRequest(method, h.Link, strings.NewReader(send_data))    if err != nil {        return nil, err    }    defer req.Body.Close()     //设置默认header    if len(h.Header) == 0 {        //json        if strings.ToLower(h.SendType) == SENDTYPE_JSON {            h.Header = map[string]string{                "Content-Type": "application/json; charset=utf-8",            }        } else { //form            h.Header = map[string]string{                "Content-Type": "application/x-www-form-urlencoded",            }        }    }     for k, v := range h.Header {        if strings.ToLower(k) == "host" {            req.Host = v        } else {            req.Header.Add(k, v)        }    }     resp, err = client.Do(req)    if err != nil {        return nil, err    }    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.go

package utils import (    "testing") func Test_Get(t *testing.T) {    h := NewHttpSend(GetUrlBuild("http://127.0.0.1/test.php", map[string]string{
"name": "xiaochuan"})) _, err := h.Get() if err != nil { t.Error("请求错误:", err) } else { t.Log("正常返回") }} func Test_Post(t *testing.T) { h := NewHttpSend("http://127.0.0.1/test.php") h.SetBody(map[string]string{
"name": "xiaochuan"}) _, err := h.Post() if err != nil { t.Error("请求错误:", err) } else { t.Log("正常返回") }} func Test_Json(t *testing.T) { h := NewHttpSend("http://127.0.0.1/test.php") h.SetSendType("JSON") h.SetBody(map[string]string{
"name": "xiaochuan"}) _, err := h.Post() if err != nil { t.Error("请求错误:", err) } else { t.Log("正常返回") }} func Benchmark_GET(b *testing.B) { for i := 0; i < b.N; i++ { h := NewHttpSend(GetUrlBuild("http://127.0.0.1/test.php", map[string]string{
"name": "xiaochuan"})) _, err := h.Get() if err != nil { b.Error("请求错误:", err) } else { b.Log("正常返回") } }}

 

转载地址:http://nmktx.baihongyu.com/

你可能感兴趣的文章
KVM克隆CentOS6虚拟机后无法启动
查看>>
【leetcode】982. Triples with Bitwise AND Equal To Zero
查看>>
虚拟机和本机配置共享文件夹
查看>>
c++异常处理
查看>>
哎呀妈呀,吓死我了,幸好服务器没崩溃。
查看>>
第一次作业-准备篇
查看>>
RunLoop基础
查看>>
移动浏览器的四大内核
查看>>
ES6解构赋值
查看>>
2435: [Noi2011]道路修建
查看>>
iOS多线程运用
查看>>
【算法】网络流与二分图
查看>>
ios中Runtime的介绍以及使用
查看>>
Python字典的实现原理
查看>>
多线程爬虫实现(下)
查看>>
二:Ionic Framework支持Android开发
查看>>
[Unity] 精灵动画制作中需要注意的一些问题
查看>>
mybatis运行原理(面试回答)
查看>>
js基础知识梳理
查看>>
Hadoop入门 【1】 下载源码,构建
查看>>