新聞中心
基本使用
我們來看幾個?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


咨詢
建站咨詢
