本文作者:icy

golang-http客户端请求-HttpRequest

icy 2021-01-28 1349 抢沙发
golang-http客户端请求-HttpRequest摘要: 推荐一个http的包打开比较慢这里记录一下使用 get github.com/kirinlabs/HttpRequest如何使用HttpRequest?创建请求对象使...

golang-http客户端请求-HttpRequest

推荐一个http的包

打开比较慢这里记录一下使用

  get github.com/kirinlabs/HttpRequest

如何使用HttpRequest?
创建请求对象使用http.DefaultTransport

 req := HttpRequest.NewRequest()
 req := HttpRequest.NewRequest().Debug(true).SetTimeout(5)

Set headers

    req.SetHeaders(map[string]string{
        "Content-Type": "application/x-www-form-urlencoded",
        "Connection": "keep-alive",
    })

    req.SetHeaders(map[string]string{
        "Source":"api",
    })

Set cookies

    req.SetCookies(map[string]string{
        "name":"json",
        "token":"",
    })

    req.SetCookies(map[string]string{
        "age":"19",
    })

Set basic auth

  req.SetBasicAuth("username","password")

Set timeout

  req.SetTimeout(5)  //default 30s

如果要自定义客户机对象并重用TCP连接,则需要定义全局http.RoundTripper或&http.传输,因为http连接池的重用是基于传输的。

    var transport *http.Transport
    func init() {   
        transport = &http.Transport{
            DialContext: (&net.Dialer{
                Timeout:   30 * time.Second,
                KeepAlive: 30 * time.Second,
                DualStack: true,
            }).DialContext,
            MaxIdleConns:          100, 
            IdleConnTimeout:       90 * time.Second,
            TLSHandshakeTimeout:   5 * time.Second,
            ExpectContinueTimeout: 1 * time.Second,
        }
    }

    func demo(){
        // Use http.DefaultTransport
        res, err := HttpRequest.Get("http://127.0.0.1:8080")
        // Use custom Transport
        res, err := HttpRequest.Transport(transport).Get("http://127.0.0.1:8080")
    }

面向对象操作模式

    req := HttpRequest.NewRequest().
        Debug(true).
        SetHeaders(map[string]string{
            "Content-Type": "application/x-www-form-urlencoded",
        }).SetTimeout(5)
    resp,err := req.Get("http://127.0.0.1")

    resp,err := HttpRequest.NewRequest().Get("http://127.0.0.1")

GET

    resp, err := req.Get("http://127.0.0.1:8000")
    resp, err := req.Get("http://127.0.0.1:8000",nil)
    resp, err := req.Get("http://127.0.0.1:8000?id=10&title=HttpRequest")
    resp, err := req.Get("http://127.0.0.1:8000?id=10&title=HttpRequest","address=beijing")

    resp, err := HttpRequest.Get("http://127.0.0.1:8000")
    resp, err := HttpRequest.Debug(true).SetHeaders(map[string]string{}).Get("http://127.0.0.1:8000")

Multi parameter

    resp, err := req.Get("http://127.0.0.1:8000?id=10&title=HttpRequest",map[string]interface{}{
        "name":  "jason",
        "score": 100,
    })
    defer resp.Close()

    body, err := resp.Body()
    if err != nil {
        return
    }

    return string(body)

POST

    // Send nil
    resp, err := HttpRequest.Post("http://127.0.0.1:8000")

    // Send integer
    resp, err := HttpRequest.Post("http://127.0.0.1:8000", 100)

    // Send []byte
    resp, err := HttpRequest.Post("http://127.0.0.1:8000", []byte("bytes data"))

    // Send io.Reader
    resp, err := HttpRequest.Post("http://127.0.0.1:8000", bytes.NewReader(buf []byte))
    resp, err := HttpRequest.Post("http://127.0.0.1:8000", strings.NewReader("string data"))
    resp, err := HttpRequest.Post("http://127.0.0.1:8000", bytes.NewBuffer(buf []byte))

    // Send string
    resp, err := HttpRequest.Post("http://127.0.0.1:8000", "title=github&type=1")

    // Send JSON
    resp, err := HttpRequest.JSON().Post("http://127.0.0.1:8000", "{\"id\":10,\"title\":\"HttpRequest\"}")

    // Send map[string]interface{}{}
    resp, err := req.Post("http://127.0.0.1:8000", map[string]interface{}{
        "id":    10,
        "title": "HttpRequest",
    })
    defer resp.Close()

    body, err := resp.Body()
    if err != nil {
        return
    }
    return string(body)

    resp, err := HttpRequest.Post("http://127.0.0.1:8000")
    resp, err := HttpRequest.JSON().Post("http://127.0.0.1:8000",map[string]interface{}{"title":"github"})
    resp, err := HttpRequest.Debug(true).SetHeaders(map[string]string{}).JSON().Post("http://127.0.0.1:8000","{\"title\":\"github\"}")

Jar

    j, _ := cookiejar.New(nil)
    j.SetCookies(&url.URL{
        Scheme: "http",
        Host:   "127.0.0.1:8000",
    }, []*http.Cookie{
        &http.Cookie{Name: "identity-user", Value: "83df5154d0ed31d166f5c54ddc"},
        &http.Cookie{Name: "token_id", Value: "JSb99d0e7d809610186813583b4f802a37b99d"},
    })
    resp, err := HttpRequest.Jar(j).Get("http://127.0.0.1:8000/city/list")
    defer resp.Close()

    if err != nil {
        log.Fatalf("Request error:%v", err.Error())
    }

Proxy

    proxy, err := url.Parse("http://proxyip:proxyport")
    if err != nil {
        log.Println(err)
    }

    resp, err := HttpRequest.Proxy(http.ProxyURL(proxy)).Get("http://127.0.0.1:8000/ip")
    defer resp.Close()

    if err != nil {
        log.Println("Request error:%v", err.Error())
    }

    body, err := resp.Body()
    if err != nil {
        log.Println("Get body error:%v", err.Error())
    }
    log.Println(string(body))

Upload

Params: url, filename, fileinput

    resp, err := req.Upload("http://127.0.0.1:8000/upload", "/root/demo.txt","uploadFile")
    body, err := resp.Body()
    defer resp.Close()
    if err != nil {
        return
    }
    return string(body)

Debug

Default false

  req.Debug(true)

Json

Post JSON request

     req.SetHeaders(map[string]string{"Content-Type": "application/json"})

    //Or

    req.JSON().Post("http://127.0.0.1:8000", map[string]interface{}{
        "id":    10,
        "title": "github",
    })

    req.JSON().Post("http://127.0.0.1:8000", "{\"title\":\"github\",\"id\":10}")

实列

    import "github.com/kirinlabs/HttpRequest"

    resp,err := HttpRequest.Get("http://127.0.0.1:8000/")
    resp,err := HttpRequest.Get("http://127.0.0.1:8000/","title=github")
    resp,err := HttpRequest.Get("http://127.0.0.1:8000/?title=github")
    resp,err := HttpRequest.Get("http://127.0.0.1:8000/",map[string]interface{}{
        "title":"github",
    })
    resp,err := HttpRequest.Debug(true).JSON().SetHeaders(map[string]string{
        "source":"api",
    }).SetCookies(map[string]string{
        "name":"httprequest",
    }).Post("http://127.0.0.1:8000/")


    //Or
    req := HttpRequest.NewRequest()
    req := req.Debug(true).SetHeaders()
    resp,err := req.Debug(true).JSON().SetHeaders(map[string]string{
        "source":"api",
    }).SetCookies(map[string]string{
        "name":"httprequest",
    }).Post("http://127.0.0.1:8000/")

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

分享

发表评论

快捷回复:

评论列表 (暂无评论,1349人围观)参与讨论

还没有评论,来说两句吧...