代码拉取完成,页面将自动刷新
同步操作将从 goflyfox/gfstudy 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。
请求:
响应:
放问GF启动的网址,通过Chrome F12查看NetWork中的URL;
优点:简单方便,浏览器支持完善,工具链成熟;
这个先启动一个gf的http server,然后我们通过go test 来测试ghttp client;
package main
import (
"github.com/gogf/gf/frame/g"
"github.com/gogf/gf/net/ghttp"
)
func main() {
s := g.Server()
group := s.Group("/api")
// 默认路径
group.ALL("/", func(r *ghttp.Request) {
r.Response.Writeln("Welcome GoFrame!")
})
// GET带参数
group.GET("/hello", func(r *ghttp.Request) {
r.Response.Writeln("Hello World!")
r.Response.Writeln("name:", r.GetString("name"))
})
// POST KV
group.POST("/test", func(r *ghttp.Request) {
r.Response.Writeln("func:test")
r.Response.Writeln("name:", r.GetString("name"))
r.Response.Writeln("age:", r.GetInt("age"))
})
// POST JSON
group.POST("/test2", func(r *ghttp.Request) {
r.Response.Writeln("func:test2")
r.Response.Writeln("passport:", r.GetString("passport"))
r.Response.Writeln("password:", r.GetString("password"))
})
// POST Header
group.POST("/test3", func(r *ghttp.Request) {
r.Response.Writeln("func:test3")
r.Response.Writeln("Cookie:", r.Header.Get("Cookie"))
})
// POST Header
group.POST("/test4", func(r *ghttp.Request) {
r.Response.Writeln("func:test4")
h := r.Header
r.Response.Writeln("accept-encoding:", h.Get("accept-encoding"))
r.Response.Writeln("accept-language:", h.Get("accept-language"))
r.Response.Writeln("referer:", h.Get("referer"))
r.Response.Writeln("cookie:", h.Get("cookie"))
r.Response.Writeln(r.Cookie.Map())
})
s.SetPort(80)
s.Run()
}
单元测试源码文件可以由多个测试用例组成,每个测试用例函数需要以Test
为前缀,例如:
func TestXXX( t *testing.T )
go test
指令来执行,没有也不需要 main() 作为函数入口。所有在以_test
结尾的源码内以Test
开头的函数会自动被执行。package test
import (
"fmt"
"github.com/gogf/gf/net/ghttp"
"testing"
)
var path = "http://127.0.0.1/api"
// GET请求
func TestGet(t *testing.T) {
if response, err := ghttp.Get(path); err != nil {
panic(err)
} else {
defer response.Close()
t.Log(response.ReadAllString())
}
if response, err := ghttp.Post(path); err != nil {
panic(err)
} else {
defer response.Close()
t.Log(response.ReadAllString())
}
}
// GET请求带参数
func TestHello(t *testing.T) {
if response, err := ghttp.Get(path + "/hello?name=whoami"); err != nil {
panic(err)
} else {
defer response.Close()
t.Log(response.ReadAllString())
}
}
// POST请求
func TestPost(t *testing.T) {
if response, err := ghttp.Post(path+"/test", "name=john&age=18"); err != nil {
panic(err)
} else {
defer response.Close()
t.Log(response.ReadAllString())
}
}
// POST JSON
func TestPostJson(t *testing.T) {
if response, err := ghttp.Post(path+"/test2",
`{"passport":"john","password":"123456"}`); err != nil {
panic(err)
} else {
defer response.Close()
t.Log(response.ReadAllString())
}
}
// POST Header头
func TestPostHeader(t *testing.T) {
c := ghttp.NewClient()
c.SetHeader("Cookie", "name=john; score=100")
if r, e := c.Post(path + "/test3"); e != nil {
panic(e)
} else {
fmt.Println(r.ReadAllString())
}
}
// POST Header头
func TestPostHeader2(t *testing.T) {
c := ghttp.NewClient()
c.SetHeaderRaw(`
accept-encoding: gzip, deflate, br
accept-language: zh-CN,zh;q=0.9,en;q=0.8
referer: https://idonottell.you
cookie: name=john; score=100
user-agent: my test http client
`)
if r, e := c.Post(path + "/test4"); e != nil {
panic(e)
} else {
fmt.Println(r.ReadAllString())
}
}
最后,建议初学者搜索下 HTTP协议进行学习;
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。