基本示例

我们来看几个HTTP客户端请求的例子:

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

    1. if response, err := ghttp.Get("https://goframe.org"); err != nil {
    2. panic(err)
    3. } else {
    4. defer response.Close()
    5. fmt.Println(response.ReadAllString())
    6. }
  2. 发送GET请求,下载远程文件

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

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

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

    1. if response, err := ghttp.Post("http://127.0.0.1:8199/form", "name=john&age=18"); err != nil {
    2. panic(err)
    3. } else {
    4. defer response.Close()
    5. fmt.Println(response.ReadAllString())
    6. }

    传递多参数的时候用户可以使用&符号进行连接,注意参数值往往需要通过gurl.Encode编码一下。

  4. 发送POST请求,参数为map类型,并打印出返回值

    1. if response, err := ghttp.Post("http://127.0.0.1:8199/form", g.Map{
    2. "submit" : "1",
    3. "callback" : "http://127.0.0.1/callback?url=http://baidu.com",
    4. })); err != nil {
    5. panic(err)
    6. } else {
    7. defer response.Close()
    8. fmt.Println(response.ReadAllString())
    9. }

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

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

    1. if response, err := ghttp.Post("http://127.0.0.1:8199/api/user", `{"passport":"john","password":"123456","password-confirm":"123456"}`); err != nil {
    2. panic(err)
    3. } else {
    4. defer response.Close()
    5. fmt.Println(response.ReadAllString())
    6. }

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

  6. 发送DELETE请求,并打印出返回值

    1. if response, err := ghttp.Delete("http://127.0.0.1:8199/user", "10000"); err != nil {
    2. panic(err)
    3. } else {
    4. defer response.Close()
    5. fmt.Println(response.ReadAllString())
    6. }