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

grequests----golang的requests库的更多相关文章

  1. Golang实现requests库

    Golang实现requests库 简单的封装下,方便使用,像python的requests库一样. Github地址 Github 支持 GET.POST.PUT.DELETE applicatio ...

  2. 异步请求Python库 grequests的应用和与requests库的响应速度的比较

    requests库是python一个优秀的HTTP库,使用它可以非常简单地执行HTTP的各种操作,例如GET.POST等.不过,这个库所执行的网络请求都是同步了,即cpu发出请求指令后,IO执行发送和 ...

  3. Python爬虫小白入门(二)requests库

    一.前言 为什么要先说Requests库呢,因为这是个功能很强大的网络请求库,可以实现跟浏览器一样发送各种HTTP请求来获取网站的数据.网络上的模块.库.包指的都是同一种东西,所以后文中可能会在不同地 ...

  4. Requests库上传文件时UnicodeDecodeError: 'ascii' codec can't decode byte错误解析

    在使用Request上传文件的时候碰到如下错误提示: 2013-12-20 20:51:09,235 __main__ ERROR 'ascii' codec can't decode byte 0x ...

  5. Requests库的几种请求 - 通过API操作Github

    本文内容来源:https://www.dataquest.io/mission/117/working-with-apis 本文的数据来源:https://en.wikipedia.org/wiki/ ...

  6. python脚本实例002- 利用requests库实现应用登录

    #! /usr/bin/python # coding:utf-8 #导入requests库 import requests #获取会话 s = requests.session() #创建登录数据 ...

  7. 大概看了一天python request源码。写下python requests库发送 get,post请求大概过程。

    python requests库发送请求时,比如get请求,大概过程. 一.发起get请求过程:调用requests.get(url,**kwargs)-->request('get', url ...

  8. python WEB接口自动化测试之requests库详解

    由于web接口自动化测试需要用到python的第三方库--requests库,运用requests库可以模拟发送http请求,再结合unittest测试框架,就能完成web接口自动化测试. 所以笔者今 ...

  9. python爬虫从入门到放弃(四)之 Requests库的基本使用

    什么是Requests Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库如果你看过上篇文章关于urllib库的使用,你会发现,其 ...

  10. (转)Python爬虫利器一之Requests库的用法

    官方文档 以下内容大多来自于官方文档,本文进行了一些修改和总结.要了解更多可以参考 官方文档 安装 利用 pip 安装 $ pip install requests 或者利用 easy_install ...

随机推荐

  1. PAT (Basic Level) Practise (中文)-1036. 跟奥巴马一起编程(15)

    PAT (Basic Level) Practise (中文)-1036. 跟奥巴马一起编程(15)  http://www.patest.cn/contests/pat-b-practise/103 ...

  2. OmniFocus

    褪墨・时间管理 “把所有事情都从你的脑袋里弄出来.在事情出现就做好相关行动的一系列决定,而不是在事情爆发的时候.以合适的类别组织好你的项目的各种提醒以及下一步行动.保持你的系统更新和完整,及时进行回顾 ...

  3. ios之UITextView

    我们计划创建UITextView,实现UITextViewDelegate协议方法,使用NSLog检查该方法何时被调用.我们还会接触到如何在TextView中限制字符的数量,以及如何使用return键 ...

  4. Mac 录制视频,并转为GIF格式

    内容中包含 base64string 图片造成字符过多,拒绝显示

  5. substring substr slice 区别

    1. substring(start,end)  返回指定索引区间的字串,不改变原字符串 start 必需,开始位置的索引,一个非负的整数 end  可选,结束位置的索引(不包括其本身),如果未设置, ...

  6. linux centeros 通过 innoback 工具备份mysql 5.7 全库并自动压缩zip上传到备份服务器的脚本,附自动清理过期备份

    innoback 安装见连接:https://blog.csdn.net/fanren224/article/details/79693863 脚本解析后续将更新 181024:更新添加定期清理备份的 ...

  7. 微信开发 access_token 数量限制问题

    微信对access_token的请求有数量限制, 如果用户量特别多的话, access_token  可能会不够用 两种方案: 1.  access_token 加入缓存并设置2小时的失效时间,每次从 ...

  8. webpack hmr

    参考: https://webpack.js.org/concepts/hot-module-replacement/ https://webpack.js.org/guides/hot-module ...

  9. 常用模块之configpaser与shutil

    configparser模块 定义:configparser翻译为配置解析,即它是用来解析配置文件的 配置文件:用于编写程序的配置信息的文件 配置文件编写格式 配置文件中只允许出现两种类型的数据 se ...

  10. 我的Python分析成长之路4

    一.函数 1.什么是函数?:函数是带名字的代码块,调用函数,只要调用函数名就可以.    2.函数的性质:1.减少重复代码 2.使程序变得可扩展 3.使程序变得易维护 3.编程范示: 1.面向对象编程 ...