基本使用

  1. 发送GET请求,并打印出返回值

  2. 发送GET请求,下载远程文件

    1. if r, err := g.Client().Get("https://goframe.org/cover.png"); err != nil {
    2. panic(err)
    3. } else {
    4. defer r.Close()
    5. gfile.PutBytes("/Users/john/Temp/cover.png", r.ReadAll())
    6. }

    下载文件操作,小文件下载非常简单。需要注意的是,如果远程文件比较大时,服务端会分批返回数据,因此会需要客户端发多个GET请求,每一次通过Header来请求分批的文件范围长度,感兴趣的同学可自行研究相关细节。

  3. 发送POST请求,并打印出返回值

    1. if r, err := g.Client().Post("http://127.0.0.1:8199/form", "name=john&age=18"); err != nil {
    2. panic(err)
    3. } else {
    4. defer r.Close()
    5. fmt.Println(r.ReadAllString())
    6. }
  4. 发送POST请求,参数为map类型,并打印出返回值

    1. if r, err := g.Client().Post(
    2. "http://127.0.0.1:8199/form",
    3. "submit" : "1",
    4. }
    5. )); err != nil {
    6. panic(err)
    7. } else {
    8. defer r.Close()
    9. fmt.Println(r.ReadAllString())
    10. }

    传递多参数的时候用户可以使用&符号进行连接,也可以直接使用map(其实之前也提到,任意数据类型都支持,包括struct)。

  5. 发送POST请求,参数为JSON数据,并打印出返回值

    可以看到,通过ghttp客户端发送JSON数据请求非常方便,直接通过Post方法提交即可,客户端会自动将请求的Content-Type设置为application/json

    1. if r, err := g.Client().Delete("http://user.svc/v1/user/delete/1", "10000"); err != nil {
    2. panic(err)
    3. } else {
    4. defer r.Close()
    5. fmt.Println(r.ReadAllString())
    6. }

*Bytes*Content方法

Bytes及后缀结尾的请求方法为直接获取返回内容的快捷方法,这些方法将会自动读取服务端返回内容并自动关闭请求连接。需要注意的是,如果请求执行失败,返回内容将会为空。

  1. 发送GET请求,返回服务端返回内容

    1. // 返回content为[]bytes类型
    2. content := g.Client().GetBytes("https://goframe.org")
  1. // 返回content为string类型
  2. content := g.Client().GetContent("https://goframe.org")
  3. ```
  1. 发送POST请求,返回服务端返回内容

  1. ```
  2. // 返回content为string类型
  3. content := g.Client().PostContent(
  4. "http://user.svc/v1/user/create",
  5. `{"passport":"john","password":"123456","password-confirm":"123456"}`,
  6. )
  7. ```

*Var方法

Var后缀结尾的请求方法直接请求并获取HTTP接口结果为泛型类型便于转换。往往用于服务端返回格式为JSON/XML的情况,通过返回的gvar.Var泛型对象可根据需要自动解析。此外,如果请求失败或者请求结果为空,会返回一个空的g.Var泛型对象,不影响转换方法调用。

  1. type User struct {
  2. Id int
  3. Name string
  4. }
  1. // Struct
  2. var user *User
  3. // 也可以
  4. g.Client().GetVar(url).Scan(&user)