• grequests----golang的requests库


    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

  • 相关阅读:
    PHP-配置方法
    正则表达式-基础使用整理
    SEO-长尾词与分词技术
    SEO-站外优化规范
    SEO-站内优化规范
    SEO-友情链接注意事项
    java netty之ServerBootstrap的启动
    [curator] Netflix Curator 使用
    Netty5.x中新增和值得注意的点
    带连接池的netty客户端核心功能实现剖解
  • 原文地址:https://www.cnblogs.com/zhzhlong/p/10043084.html
Copyright © 2020-2023  润新知