2021-12-13 来源:华纳网 责任编辑:韩玉玲 人气:
核心提示:功能强大的网络访问库resty

知识点:

网络访问库resty
 

本课内容:

大家好,欢迎来到谷雨课堂

 

在以前的课程中,

我们已经讲用如何用Go来进行HTTP的GET和POST请求,

 

本节我们来进一步加深一下,

在网络交互中,

大多数的请求都是JSON REST

 

那么本节,我们使用一种方式非常快速方便的方式

来优雅的实现这些功能

 

本节提供三个示例来进行讲解,

 

show me the code,let's go!

 

普通GET请求

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  func get1() {  client := resty.New()  resp, err := client.R().Get("https://worldwarner.com")
if err != nil {    log.Fatal(err)  }
  fmt.Println("Status Code:", resp.StatusCode())  fmt.Println("Status:", resp.Status())  fmt.Println("Proto:", resp.Proto())  fmt.Println("Time:", resp.Time())  fmt.Println("Received At:", resp.ReceivedAt())  fmt.Println("Size:", resp.Size())  fmt.Println("Headers:")for key, value := range resp.Header() {    fmt.Println(key, "=", value)  }  fmt.Println("Cookies:")for i, cookie := range resp.Cookies() {    fmt.Printf("No.%d: k:%s v:%s\n", i, cookie.Name, cookie.Value)  }  fmt.Println(resp)}

 

自动转化为实例类的GET请求

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
func get_auto_parser() {  client := resty.New()  fmt.Println("访问JS库")  libs := &JsLibs{}  client.R().SetResult(libs).Get("https://api.cdnjs.com/libraries")  fmt.Printf("JS库数量: %d \n", len(libs.Results))
for idx, lib := range libs.Results {    fmt.Printf("No.%d ", idx)    fmt.Printf("%s %s\n", lib.Name, lib.Latest)if idx > 10 {break    }  }}

 

全功能的REST JSON的POST请求

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
func resty_request() {  fmt.Println("RESTY 请求")  client := resty.New()  ret, _ := client.R().    SetAuthToken("i am a token").    SetBody(JsLib{Name: "guyu", Latest: "谷雨课堂"}).    SetQueryParams(map[string]string{"get_a": "lianning","get_b": "411",    }).    Post("http://www.hn1517.com/t.php")
  fmt.Println(ret)}

 

以下是整合起来的完整代码

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
//谷雨课堂//No.047 Go干货!功能强大的网络访问库resty
package main
import ("fmt""log"
"github.com/go-resty/resty/v2")
type JsLib struct {  Name   string  Latest string}
type JsLibs struct {  Results []*JsLib}
func main() {
//最普通的Get请求  get1()
//自动转化为实体类的Get请求  get_auto_parser()
//全功能的rest请求  resty_request()}
func resty_request() {  fmt.Println("RESTY 请求")  client := resty.New()  ret, _ := client.R().    SetAuthToken("i am a token").    SetBody(JsLib{Name: "guyu", Latest: "谷雨课堂"}).    SetQueryParams(map[string]string{"get_a": "lianning","get_b": "411",    }).    Post("http://www.hn1517.com/t.php")
  fmt.Println(ret)}
func get_auto_parser() {  client := resty.New()  fmt.Println("访问JS库")  libs := &JsLibs{}  client.R().SetResult(libs).Get("https://api.cdnjs.com/libraries")  fmt.Printf("JS库数量: %d \n", len(libs.Results))
for idx, lib := range libs.Results {    fmt.Printf("No.%d ", idx)    fmt.Printf("%s %s\n", lib.Name, lib.Latest)if idx > 10 {break    }  }}
func get1() {  client := resty.New()  resp, err := client.R().Get("https://worldwarner.com")
if err != nil {    log.Fatal(err)  }
  fmt.Println("Status Code:", resp.StatusCode())  fmt.Println("Status:", resp.Status())  fmt.Println("Proto:", resp.Proto())  fmt.Println("Time:", resp.Time())  fmt.Println("Received At:", resp.ReceivedAt())  fmt.Println("Size:", resp.Size())  fmt.Println("Headers:")for key, value := range resp.Header() {    fmt.Println(key, "=", value)  }  fmt.Println("Cookies:")for i, cookie := range resp.Cookies() {    fmt.Printf("No.%d: k:%s v:%s\n", i, cookie.Name, cookie.Value)  }  fmt.Println(resp)}

以上就是本节的全部内容,

这个库使用非常的方便,

谷雨老师已经部分线上项目进行的实际的使用,

希望也能帮到同学们!

 

 

 

完整的源代码可以登录【华纳网】下载。

https://www.worldwarner.com/




 





免责声明:本文仅代表作者个人观点,与华纳网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。