gpt4 book ai didi

Golang 语言极简 HTTP 客户端 GoRequest

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Golang 语言极简 HTTP 客户端 GoRequest由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

Golang 语言极简 HTTP 客户端 GoRequest

1介绍

GoRequest 是一个极简的 HTTP 客户端,作者灵感来源于 Node.js 库 SuperAgent。相比 Golang 标准库 net/http,GoRequest 使用起来更加简单。GoRequest 官方的口号是 “像机枪一样发送请求”.

GoRequest 包含以下功能:

  • 支持 HTTP 请求方式:Get/Post/Put/Head/Delete/Patch/Options
  • 支持设置 header 请求头
  • 支持使用 JSON 字符串作为请求参数
  • 支持将多路请求的方式发送数据和文件
  • 支持通过代理发送请求
  • 支持为请求设置超时
  • 支持 TLS 客户端设置
  • 支持设置重定向策略
  • 支持为请求设置 cookie
  • CookieJar - automatic in-memory cookiejar
  • 支持请求头设置基本身份认证

安装方式:

  1. gogetgithub.com/parnurzeal/gorequest

2HTTP 请求方式

Golang 发送一个简单的 Get 请求,使用 net/http 标准库和使用 GoRequst 库,两种发送 Get 请求的方式都比较简单.

示例代码如下:

标准库方式:

  1. resp,err:=http.Get("http://example.com/")

GoRequest 库方式:

  1. request:=gorequest.New()
  2. resp,body,errs:=request.Get("http://example.com/").End()

或(该 GoRequest 方式无法复用对象) 。

  1. resp,body,errs:=gorequest.New().Get("http://example.com/").End()

阅读上面这两段代码,我们可以发现,使用标准库的方式发送 Get 请求,甚至比使用 GoRequest 库的方式发送 Get 请求更加简单.

但是,当我们需求稍作修改,比如我们需要为 Get 请求,设置 header 头和设置重定向策略。我们再来看一下分别使用标准库和 GoRequest 库两种实现方式.

标准库方式:

  1. client:=&http.Client{
  2. CheckRedirect:redirectPolicyFunc,
  3. }
  4. req,err:=http.NewRequest("GET","http://example.com",nil)
  5. req.Header.Add("If-None-Match",`W/"wyzzy"`)
  6. resp,err:=client.Do(req)

GoRequest 库方式(其它 HTTP 请求方式与 Get 使用方式相同):

  1. request:=gorequest.New()
  2. resp,body,errs:=request.Get("http://example.com").
  3. RedirectPolicy(redirectPolicyFunc).
  4. Set("If-None-Match",`W/"wyzzy"`).
  5. End()

阅读上面两段代码,很容易发现使用 GoRequest 方式使实现更加简单。使用标准库方式,首先需要创建一个 Client,然后使用不同的命令设置 header 头等操作,这仅仅是为了实现一个 HTTP 请求。而使用 GoRequest 方式,仅需链式调用两个方法即可轻松实现.

3JSON 格式请求参数

在 Golang 语言中,如果使用标准库 net/http 发送请求参数为 JSON 格式的 POST 请求,首先需要先将 map 或 struct 类型的数据,使用标准库 encoding/json 的 Marshal 方法,将数据转换为 JSON 格式的数据,并且设置 header 头参数 Content-Type 的值为 application/json,然后创建一个 Client,最终你的代码变得越来越长,越来越难维护.

标准库方式:

  1. m:=map[string]interface{}{
  2. "name":"backy",
  3. "species":"dog",
  4. }
  5. mJson,_:=json.Marshal(m)
  6. contentReader:=bytes.NewReader(mJson)
  7. req,_:=http.NewRequest("POST","http://example.com",contentReader)
  8. req.Header.Set("Content-Type","application/json")
  9. req.Header.Set("Notes","GoRequestiscoming!")
  10. client:=&http.Client{}
  11. resp,_:=client.Do(req)

如果使用 GoRequest 库发送请求参数为 JSON 格式的 POST 请求,因为它默认支持 JSON 格式的请求参数,所以它只需要一行代码就可以实现.

GoRequest 库方式:

  1. request:=gorequest.New()
  2. resp,body,errs:=request.Post("http://example.com").
  3. Set("Notes","gorequstiscoming!").
  4. Send(`{"name":"backy","species":"dog"}`).
  5. End()

4支持回调函数 Callback

GoRequest 库还支持回调函数,你可以根据自己的项目需求灵活使用它,回调函数示例代码如下:

  1. funcprintStatus(respgorequest.Response,bodystring,errs[]error){
  2. fmt.Println(resp.Status)
  3. }
  4. gorequest.New().Get("http://example.com").End(printStatus)

5请求控制

在 Golang 项目开发中,有时我们可能需要对请求做一些额外控制,比如超时处理,重试请求 N 次,重定向处理等。GoRequest 库都可以为我们提供简单的实现方式.

超时处理:

  1. request:=gorequest.New().Timeout(2*time.Millisecond)
  2. resp,body,errs:=request.Get("http://example.com").End()

需要注意的是,Timeout 是将 Dial 连接和 IO 读写的耗时总和,与时间参数作比较.

重试请求:

  1. request:=gorequest.New()
  2. resp,body,errs:=request.Get("http://example.com/").
  3. Retry(3,5*time.Second,http.StatusBadRequest,http.StatusInternalServerError).
  4. End()

阅读上面这段代码,它的含义是当服务器返回结果是 http.StatusBadRequest 或 http.StatusInternalServerError 时,会每隔 5 秒重试请求一次,共重试 3 次.

重定向处理:

  1. request:=gorequest.New()
  2. resp,body,errs:=request.Get("http://example.com/").
  3. RedirectPolicy(func(reqRequest,via[]*Request)error{
  4. ifreq.URL.Scheme!="https"{
  5. returnhttp.ErrUseLastResponse
  6. }
  7. }).
  8. End()

阅读上面这段代码,它的含义是将 http 请求重定向为 https 请求.

6返回结果处理方式

读者朋友们可能已经发现,以上示例代码都是以 End 结束,End 的含义是返回结果是字符串类型,如果我们希望返回结果是其他类型,比如字节类型和结构体类型,可以将 End 分别替换为 EndBytes 和 EndStruct.

EndBytes 格式:

  1. resp,bodyBytes,errs:=gorequest.New().Get("http://example.com/").EndBytes()

EndStruct 格式:

  1. heyYoustruct{
  2. Heystring`json:"hey"`
  3. }
  4. varheyYouheyYou
  5. resp,_,errs:=gorequest.New().Get("http://example.com/").EndStruct(&heyYou)

7总结

本文我们介绍 Golang 语言的极简 HTTP 客户端 GoRequest 以及它的使用方法。它比标准库 net/http 使用方式简单,当我们项目开发中需要使用 HTTP 方式调用接口时,强烈推荐使用 GoRequest 库.

GoRequest 底层在大多数用例中是基于 http.Client 实现的,所以通过一次调用 gorequest.New() 得到的对象,应尽可能多次使用.

GoRequest 除了上面介绍的 JSON 参数,它还支持 Struct 和 File,感兴趣的读者可以查阅官方文档了解相关内容.

原文链接:https://mp.weixin.qq.com/s/vvzu_KDejpQ4rJUsT2wD_Ahttps://mp.weixin.qq.com/s/vvzu_KDejpQ4rJUsT2wD_A 。

最后此篇关于Golang 语言极简 HTTP 客户端 GoRequest的文章就讲到这里了,如果你想了解更多关于Golang 语言极简 HTTP 客户端 GoRequest的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com