beego httplib库使用方法
beego是一个优秀的api,web框架,不只是其丰富的功能特性,更是因为其功能的独立性,可以根据自身需要单独添加使用。 常用的模块有以下这些:
- session 模块
- cache 模块
- logs 模块
- httplib 模块
- context 模块
- toolbox 模块
- config 模块
- i18n 模块
本文要讲解的是httplib客户端请求的使用。
日常开发中不只是要接收请求,还会发起http请求,go本身提供了http库可以实现http请求,不过使用起来略微复杂一些。如果使用的框架是beego的话,那推荐使用httplib。
基本使用方法
import (
"github.com/astaxie/beego/httplib"
)
然后初始化请求方法,返回对象
req := httplib.Get("http://beego.me/")
然后我们就可以获取数据了
str, err := req.String()
if err != nil {
t.Fatal(err)
}
fmt.Println(str)
以上是最基本的使用方法,更多文档可以查看httplib文档,本文不再做一次搬运工。 下面提供一些使用实例以供参考:
获取body信息
func RequestByAjax3(region, language string) {
req := httplib.Get(fmt.Sprintf("https://m.lagou.com/search.json?city=%s&positionName=%s&pageNo=1&pageSize=1", url.QueryEscape(region), language))
req.Header("Referer", "https://m.lagou.com/search.html")
req.Header("Cookie", "JSESSIONID=ABAAAECAAHHAAFD8DC17DEB3DE2DF3C5FCAE8C3D4423759; user_trace_token=20200117101405-234d1d57-b8c1-4d66-956e-c49f35f28f75; LGSID=20200117101406-09c6fa83-38cf-11ea-b2e7-525400f775ce; PRE_LAND=https%3A%2F%2Fm.lagou.com%2Fsearch.html; LGUID=20200117101406-09c6fc06-38cf-11ea-b2e7-525400f775ce; X_HTTP_TOKEN=8e6e6bd15763030e425822975149ec77fc62d73ec7;")
req.Header("Host", "m.lagou.com")
req.Header("User-Agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1")
var resBody wapResBody//TODO 根据需要自己定义
req.ToJSON(&resBody)
logs.Debug(">>>>>>%+v", resBody)
if resBody.State != 1 {
logs.Error("获取"+language+"数据为空!", fmt.Sprint("%+v", resBody))
}
logs.Debug(resBody)
}
上面代码中的resBody就是接收到的body内容,其核心是req.ToJSON(&resBody)。
注意:上面代码只是例子,因为拉钩做了防爬策略,cookie会失效,所以直接抄下来可能不会正常解析数据,请使用正常的接口做测试!
获取header头信息
//获取页面cookie
func GetCookies(url string) []string {
req1 := httplib.Get(url)
req1.Header("User-Agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1")
resp, err := req1.Response()
if err != nil {
logs.Error("请求页面错误", err.Error())
}
logs.Info("%+v", resp.Header["Set-Cookie"])
for key, val := range resp.Header["Set-Cookie"] {
logs.Debug(key, "-:", val)
}
return resp.Header["Set-Cookie"]
}
resp.Header就是获取到的header内容,不过这是个map类型的数据,需要用这种方式来获取对应的header数据resp.Header[“Set-Cookie”]
小结
总体来说httplib库比原生http库使用简单很多,也不太需要关注很多细节就可以实现一个客户端请求。