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库使用简单很多,也不太需要关注很多细节就可以实现一个客户端请求。