我们来看几个HTTP
客户端请求的简单示例。
GET
请求,并打印出返回值if r, err := g.Client().Get(ctx, "https://goframe.org"); err != nil {
panic(err)
}
defer r.Close()
fmt.Println(r.ReadAllString())
GET
请求,下载远程文件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())
下载文件操作,小文件下载非常简单。需要注意的是,如果远程文件比较大时,服务端会分批返回数据,因此会需要客户端发多个GET
请求,每一次通过Header
来请求分批的文件范围长度。
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())
传递多参数的时候用户可以使用&
符号进行连接,注意参数值往往需要通过gurl.Encode
编码一下。
POST
请求,参数为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())
传递多参数的时候用户可以使用&
符号进行连接,也可以直接使用map
(其实之前也提到,任意数据类型都支持,包括struct
)。
POST
请求,参数为JSON
数据,并打印出返回值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
客户端发送JSON
数据请求非常方便,直接通过Post
方法提交即可,客户端会自动将请求的Content-Type
设置为application/json
。
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
方法用于获取[]byte
类型结果,*Content
方法用于获取string
类型结果。需要注意的是,如果请求执行失败,返回内容将会为空。
GET
请求,返回服务端返回内容 // 返回content为[]bytes类型
content := g.Client().GetBytes(ctx, "https://goframe.org")
// 返回content为string类型
content := g.Client().GetContent(ctx, "https://goframe.org")
POST
请求,返回服务端返回内容// 返回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
后缀结尾的请求方法直接请求并获取HTTP
接口结果为g.Var
泛型类型便于转换。往往用于服务端返回格式为JSON/XML
的情况,通过返回的g.Var
泛型对象可根据需要自动解析。此外,如果请求失败或者请求结果为空,会返回一个空的g.Var
泛型对象,不影响转换方法调用。
使用示例:
type User struct {
Id int
Name string
}
// Struct
var user *User
g.Client().GetVar(ctx, url).Scan(&user)
// Struct数组
var users []*User
g.Client().GetVar(ctx, url).Scan(&users)
Tornado是一个 Python Web 框架和异步网络库,最初是在FriendFeed开发的。通过使用非阻塞网络 I/O,Tornado 可以扩展到数万个打...
在上一章节中,(基于依赖项注入系统的)安全系统向路径操作函数提供了一个str类型的token:from fastapi import Depends, FastA...
对于更复杂的匹配需求,你能定义你自己的路径转换器。转换器是一个类,包含如下内容:字符串形式的 regex 类属性。一个to_...
Django 可以为你创建迁移。对你的模型进行修改——比如说,添加一个字段和删除一个模型——然后运行 makemigrations:$ pyth...
为了方便起见,Django 提供一种方法来测试用户浏览器是否支持cookies。调用视图里 request.session 的 set_test_cookie()...
可以通过继承 AbstractBaseSession 和 SessionStore类来创建基于Django中包含的自定义数据库支持的会话引擎(即 db ...
一旦你定义了你的模型,你需要告诉 Django 你准备 使用 这些模型。你需要修改设置文件中的 INSTALLED_APPS,在这个设置...