日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)GoFrame教程:GoFrameHTTPClient-基本使用

基本使用

我們來看幾個?HTTP?客戶端請求的簡單示例。

  • 發(fā)送?GET?請求,并打印出返回值
if r, err := g.Client().Get(ctx, "https://GOframe.org"); err != nil {
    panic(err)
}
defer r.Close()
fmt.Println(r.ReadAllString())

  • 發(fā)送?GET?請求,下載遠(yuǎn)程文件
if r, err := g.Client().Get(ctx, "https://GoFrame.org/cover.png"); err != nil {
    panic(err)
}
defer r.Close()
gfile.PutBytes("/Users/john/Temp/cover.png", r.ReadAll())

下載文件操作,小文件下載非常簡單。需要注意的是,如果遠(yuǎn)程文件比較大時,服務(wù)端會分批返回數(shù)據(jù),因此會需要客戶端發(fā)多個?GET?請求,每一次通過?Header?來請求分批的文件范圍長度。

  • 發(fā)送?POST?請求,并打印出返回值
if r, err := g.Client().Post(ctx, "http://127.0.0.1:8199/form", "name=john&age=18"); err != nil {
    panic(err)
}
defer r.Close()
fmt.Println(r.ReadAllString())

傳遞多參數(shù)的時候用戶可以使用?&?符號進行連接,注意參數(shù)值往往需要通過?gurl.Encode?編碼一下。

  • 發(fā)送?POST?請求,參數(shù)為?map?類型,并打印出返回值
if r, err := g.Client().Post(
    ctx, 
    "http://127.0.0.1:8199/form",
    g.Map{
        "submit"   : "1",
        "callback" : "http://127.0.0.1/callback?url=http://baidu.com",
    }
)); err != nil {
    panic(err)
}
defer r.Close()
fmt.Println(r.ReadAllString())

傳遞多參數(shù)的時候用戶可以使用?&?符號進行連接,也可以直接使用?map?(其實之前也提到,任意數(shù)據(jù)類型都支持,包括?struct?)。

  • 發(fā)送?POST?請求,參數(shù)為?JSON?數(shù)據(jù),并打印出返回值
if r, err := g.Client().Post(
    ctx,
    "http://user.svc/v1/user/create",
    `{"passport":"john","password":"123456","password-confirm":"123456"}`,
); err != nil {
    panic(err)
}
defer r.Close()
fmt.Println(r.ReadAllString())

可以看到,通過?ghttp?客戶端發(fā)送?JSON?數(shù)據(jù)請求非常方便,直接通過?Post?方法提交即可,客戶端會自動將請求的?Content-Type?設(shè)置為?application/json?。

  • 發(fā)送?DELETE?請求,并打印出返回值
if r, err := g.Client().Delete(ctx, "http://user.svc/v1/user/delete/1", "10000"); err != nil {
    panic(err)
}
defer r.Close()
fmt.Println(r.ReadAllString())

*Bytes及*Content方法

以?Bytes?及?Content?后綴結(jié)尾的請求方法為直接獲取返回內(nèi)容的快捷方法,這些方法將會自動讀取服務(wù)端返回內(nèi)容并自動關(guān)閉請求連接。?*Bytes?方法用于獲取?[]byte?類型結(jié)果,?*Content?方法用于獲取?string?類型結(jié)果。需要注意的是,如果請求執(zhí)行失敗,返回內(nèi)容將會為空。

  • 發(fā)送?GET?請求,返回服務(wù)端返回內(nèi)容
 // 返回content為[]bytes類型
 content := g.Client().GetBytes(ctx, "https://goframe.org")
 // 返回content為string類型
 content := g.Client().GetContent(ctx, "https://goframe.org")

  • 發(fā)送?POST?請求,返回服務(wù)端返回內(nèi)容
// 返回content為[]bytes類型
content := g.Client().PostBytes(ctx,
    "http://user.svc/v1/user/create", 
    `{"passport":"john","password":"123456","password-confirm":"123456"}`,
)
// 返回content為string類型
content := g.Client().PostContent(ctx,
    "http://user.svc/v1/user/create", 
    `{"passport":"john","password":"123456","password-confirm":"123456"}`,
)

*Var方法

以?Var?后綴結(jié)尾的請求方法直接請求并獲取?HTTP?接口結(jié)果為?g.Var?泛型類型便于轉(zhuǎn)換。往往用于服務(wù)端返回格式為?JSON/XML?的情況,通過返回的?g.Var?泛型對象可根據(jù)需要自動解析。此外,如果請求失敗或者請求結(jié)果為空,會返回一個空的?g.Var?泛型對象,不影響轉(zhuǎn)換方法調(diào)用。

使用示例:

type User struct {
    Id   int
    Name string
}
// Struct
var user *User
g.Client().GetVar(ctx, url).Scan(&user)
// Struct數(shù)組
var users []*User
g.Client().GetVar(ctx, url).Scan(&users)


分享題目:創(chuàng)新互聯(lián)GoFrame教程:GoFrameHTTPClient-基本使用
文章鏈接:http://m.5511xx.com/article/cdddjdo.html