Go HTTP Client 持久连接

https://serholiu.com/go-http-client-keepalive

 

复制代码
package main

import (
    "crypto/tls"
    "io/ioutil"
    "log"
    "net/http"
    "strings"
)

func main() {
    c := NewClient("http://127.0.0.1:8080/get")
    r, e := c.HttpGetRequest()
    if e != nil {
        log.Fatalln(e)
    }
    log.Println(string(r))
}

// Client 定义一个结构体
type Client struct {
    url    string
    client *http.Client
}

func NewClient(url string) *Client {
    return &Client{
        url: url,
        client: &http.Client{
            Transport: &http.Transport{
                MaxIdleConnsPerHost: 100, // 每台主机保持的最大空闲连接
                MaxConnsPerHost:     100, // 限制每个主机的连接总数
                //初始化client支持的http协议, 并在tls握手时告知server
                TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
            },
        },
    }
}

// HttpGetRequest http请求
func (c *Client) HttpGetRequest() (resBody []byte, err error) {

    // 初始化请求
    req, err := http.NewRequest("GET", c.url, nil)
    if err != nil {
        return nil, err
    }

    // 执行请求
    req.Header.Add("Content-Type", "application/json")
    res, err := c.client.Do(req)
    if err != nil {
        return nil, err
    }
    defer res.Body.Close()

    // 接收返回结果
    resBody, err = ioutil.ReadAll(res.Body)
    if err != nil {
        return nil, err
    }
    return resBody, nil
}

// HttpRequest http请求
func (c *Client) HttpRequest(params string) (resBody []byte, err error) {
    // 初始化请求
    body := strings.NewReader(params)
    req, err := http.NewRequest("POST", c.url, body)
    if err != nil {
        return nil, err
    }
    // 执行请求
    req.Header.Add("Content-Type", "application/json")
    res, err := c.client.Do(req)
    if err != nil {
        return nil, err
    }
    defer res.Body.Close()
    // 接收返回结果
    resBody, err = ioutil.ReadAll(res.Body)
    if err != nil {
        return nil, err
    }
    return resBody, nil
}
复制代码

 

posted @   许伟强  阅读(233)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示