GoFrame第四天

阅读: 评论:0

GoFrame第四天

GoFrame第四天

文章目录

  • GoFrame day4
    • 前言
    • HTTPClient
      • 链式操作
      • 基本使用
      • 文件上传
        • 上传服务端
        • 客户端
      • 设置CookieHeaderProxy
      • 打印请求信息

GoFrame day4

前言

上一次剩下了一个坑,那就是文件的上传部分.今天就HTTP的客户端部分进行学习总结

HTTPClient

可以使用gclient.New()创建一个客户端对象,也可以使用g.Client()方法调用创建对象(实际上也就是返回gclient.New()的对象).

这里的gclient其实也是封装了http.Client,客户端同样提供了一系列的请求方法,但是请求结果对象在使用完毕后需要用Close()关闭

链式操作

GoFrame的客户端支持链式操作,也就是多个方法可以链式调用

这个地方大家可以去看看官网中的例子

基本使用

简单的使用客户端请求的例子

package mainimport ("fmt""github/gogf/gf/v2/frame/g""github/gogf/gf/v2/os/gctx""github/gogf/gf/v2/os/gfile"
)var ctx = gctx.New()func main() {if r, err := g.Client().Get(ctx, ""); err != nil {panic(err)} else {defer r.Close()fmt.Println(r.ReadAllString())}if r, err := g.Client().Get(ctx, ".png"); err != nil {panic(err)} else {defer r.Close()gfile.PutBytes("./tmp/baidu.png", r.ReadAll())}}

为了测试客户端post请求,先写一个简单的服务

package mainimport ("github/gogf/gf/v2/frame/g""github/gogf/gf/v2/net/ghttp"
)type RegisterReq struct {Name  stringPass  string `p:"password"`Pass2 string `p:"password-confirm"`
}type RegisterRes struct {Code  int    `json:"code"`Error string `json:"error"`Data  any    `json:"data"`
}func main() {s := g.Server()s.BindHandler("/data/*", func(r *ghttp.Request) {var req *RegisterReqif err := r.Parse(&req); err != nil {r.Response.WriteJsonExit(RegisterRes{Code:  1,Error: err.Error(),})}r.Response.WriteJsonExit(RegisterRes{Data: req,})})s.SetPort(8080)s.Run()
}

然后再来试试post来传入数据

if r, err := g.Client().Post(ctx,"localhost:8080/data",`{"name":"shelgi","password":"123456","password-confirm":"123456"}`,); err != nil {panic(err)} else {defer r.Close()fmt.Println(r.ReadAllString())}

文件上传

终于开始填之前的坑了,文件上传又可以分为单文件上传和多文件上传以及表单文件上传.如果我们想限定文件类型,那么就需要利用正则进行判断.

上传服务端
package mainimport ("github/gogf/gf/v2/frame/g""github/gogf/gf/v2/net/ghttp"
)// Upload uploads files to /tmp .
func Upload(r *ghttp.Request) {files := r.GetUploadFiles("upload-file")names, err := files.Save("./tmp/")if err != nil {r.Response.WriteExit(err)}println(names)r.Response.WriteExit("upload successfully: ", names)
}// UploadShow shows uploading simgle file page.
func UploadShow(r *ghttp.Request) {r.Response.Write(`<html><head><title>GF Upload File Demo</title></head><body><form enctype="multipart/form-data" action="/upload" method="post"><input type="file" name="upload-file" /><input type="submit" value="upload" /></form></body></html>`)
}// UploadShowBatch shows uploading multiple files page.
func UploadShowBatch(r *ghttp.Request) {r.Response.Write(`<html><head><title>GF Upload Files Demo</title></head><body><form enctype="multipart/form-data" action="/upload" method="post"><input type="file" name="upload-file" multiple="multiple"/><input type="submit" value="upload" /></form></body></html>`)
}func main() {s := g.Server()s.Group("/upload", func(group *ghttp.RouterGroup) {group.POST("/", Upload)group.ALL("/show", UploadShow)group.ALL("/batch", UploadShowBatch)})s.SetPort(8080)s.Run()
}

uploadFiles类型是一个切片,并且可以看看其中的Save方法,实现了单个文件以及多个文件的保存.

客户端

客户端上传文件就只需要使用ghttp.Post(),其中参数为属性名=@file:路径

设置CookieHeaderProxy

已经全部封装在对应的Setxxx方法中,自己根据需要修改设置内容就好

打印请求信息

http客户端支持对HTTP请求的输入与输出原始信息获取与打印,方便调试,相关方法如下:

func (r *Response) Raw() string
func (r *Response) RawDump()
func (r *Response) RawRequest() string
func (r *Response) RawResponse() string

本文发布于:2024-01-29 16:22:10,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170651653316557.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:第四天   GoFrame
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23