首页 > 技术文章 > grequests----golang的requests库

zhzhlong 2018-11-30 11:15 原文

github.com/levigross/grequests:

A Go "clone" of the great and famous Requests library

特点:

  1. 响应可以序列化为JSON和XML
  2. 轻松上传文件
  3. 轻松下载文件
  4. 支持以下HTTP请求方式:GET,HEAD,POST,PUT,DELETE,PATCH,OPTIONS 

安装:

go get -u github.com/levigross/grequests

导入:

import "github.com/levigross/grequests"

GET请求:

func req() {
    res, err := grequests.Get("http://www.baidu.com", nil)
    if err != nil{
        log.Fatalln("Unable to make request: ", err)
    }
    fmt.Println(res) // 返回Response, 包括了RawResponse,StatusCode,Header...等等
        //源码部分
        //func buildResponse(resp *http.Response, err error) (*Response, error) {
        //    // If the connection didn't succeed we just return a blank response
        //    if err != nil {
        //        return &Response{Error: err}, err
        //    }
        //
        //    goodResp := &Response{
        //        // If your code is within the 2xx range – the response is considered `Ok`
        //        Ok:                 resp.StatusCode >= 200 && resp.StatusCode < 300,
        //        Error:              nil,
        //        RawResponse:        resp,
        //        StatusCode:         resp.StatusCode,
        //        Header:             resp.Header,
        //        internalByteBuffer: bytes.NewBuffer([]byte{}),
        //    }
        //    // EnsureResponseFinalized(goodResp) This will come back in 1.0
        //    return goodResp, nil
    fmt.Println(res.StatusCode)
    fmt.Println(res.Error) //Response如果没有错误,Error为nil
    fmt.Println(res.Header) //
    fmt.Println(res.Ok) // 返回bool值,用于验证返回的状态码是否是 2xx系列
    fmt.Println(res.RawResponse) // 返回http.Response,包括了很多东西,可以看源码
        //源码部分
        //type Response struct {
        //    Status     string // e.g. "200 OK"
        //    StatusCode int    // e.g. 200
        //    Proto      string // e.g. "HTTP/1.0"
        //    ProtoMajor int    // e.g. 1
        //    ProtoMinor int    // e.g. 0
        //    Header Header
        //    Body io.ReadCloser
        //    ContentLength int64
        //    TransferEncoding []string
        //    Close bool
        //    Uncompressed bool.
        //    Trailer Header
        //    Request *Request
        //    TLS *tls.ConnectionState
        //}
    fmt.Println(res.DownloadToFile("baidu.html"))  // DownloadToFile允许您将响应的内容下载到文件中
    fmt.Println(res.JSON()) // JSON是一种方法,它将使用响应主体中返回的JSON填充“userStruct”提供的结构(解析数据)
    fmt.Println(res.XML()) //XML是一种方法,它将使用响应主体中返回的XML填充“userStruct”提供的结构,
    fmt.Println(res.Bytes()) // 字节以字节数组的方式返回
    res.ClearInternalBuffer //ClearInternalBuffer是一个清除我们用来保存.String()和.Bytes()数据的内部缓冲区的函数。一旦使用了这些功能 - 您可能想要释放内存。

    n, err := res.Read()  //如果有人想要使用原始数据,那么read是我们支持io.ReadCloser的能力的一部分
    res.Close() //如果有人想要使用原始数据,关闭是我们支持io.ReadCloser的能力的一部分
}

其他可以看文档:https://godoc.org/github.com/levigross/grequests

github地址:https://github.com/levigross/grequests

 

推荐阅读