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