Fiber HTTP 客户端
🌎 Client
客户端结构体表示 Fiber HTTP客户端。
Start request
启动 HTTP 请求与 HTTP 方法和 URL 。
签名
// 客户端 http 方法
func (c *Client) Get(url string) *Agent
func (c *Client) Head(url string) *Agent
func (c *Client) Post(url string) *Agent
func (c *Client) Put(url string) *Agent
func (c *Client) Patch(url string) *Agent
func (c *Client) Delete(url string) *Agent
✨ Agent
Agent
是基于 FastHTTP’s HostClient
它有很多方便的助手方法,比如请求方法的专用方法.
Parse
解析初始化主机客户端.
解析
a := AcquireAgent()
req := a.Request()
req.Header.SetMethod(MethodGet)
req.SetRequestURI("http://example.com")
if err := a.Parse(); err != nil {
panic(err)
}
code, body, errs := a.Bytes() // ...
Set
设置给定的 key: value
Headers 。
签名:
func (a *Agent) Set(k, v string) *Agent
func (a *Agent) SetBytesK(k []byte, v string) *Agent
func (a *Agent) SetBytesV(k string, v []byte) *Agent
func (a *Agent) SetBytesKV(k []byte, v []byte) *Agent
示例:
agent.Set("k1", "v1").
SetBytesK([]byte("k1"), "v1").
SetBytesV("k1", []byte("v1")).
SetBytesKV([]byte("k2"), []byte("v2"))
// ...
Add
添加给定的 key: value
Headers. 可以使用此功能添加具有相同键的多个 Headers 。
签名:
func (a *Agent) Add(k, v string) *Agent
func (a *Agent) AddBytesK(k []byte, v string) *Agent
func (a *Agent) AddBytesV(k string, v []byte) *Agent
func (a *Agent) AddBytesKV(k []byte, v []byte) *Agent
示例:
agent.Add("k1", "v1").
AddBytesK([]byte("k1"), "v1").
AddBytesV("k1", []byte("v1")).
AddBytesKV([]byte("k2"), []byte("v2"))
// Headers:
// K1: v1
// K1: v1
// K1: v1
// K2: v2
ConnectionClose
ConnectionClose添加了 “Connection: close “头。
签名:
func (a *Agent) ConnectionClose() *Agent
示例:
agent.ConnectionClose()
// ...
UserAgent
UserAgent设置User-Agent
头的值。
签名:
func (a *Agent) UserAgent(userAgent string) *Agent
func (a *Agent) UserAgentBytes(userAgent []byte) *Agent
示例:
agent.UserAgent("fiber")
// ...
Cookie
Cookie以key: value
的形式设置一个cookie。 Cookies
可以用来设置多个cookie。
签名:
func (a *Agent) Cookie(key, value string) *Agent
func (a *Agent) CookieBytesK(key []byte, value string) *Agent
func (a *Agent) CookieBytesKV(key, value []byte) *Agent
func (a *Agent) Cookie(kv ...string) *Agent
func (a *Agent) CookiesBytesKV(kv ...[]byte) *Agent
示例:
agent.Cookie("k", "v")
agent.Cookies("k1", "v1", "k2", "v2")
// ...
Referer
Referer引用设置Referer头的值。
签名:
func (a *Agent) Referer(referer string) *Agent
func (a *Agent) RefererBytes(referer []byte) *Agent
示例:
agent.Referer("https://docs.gofiber.io")
// ...
ContentType
ContentType设置Content-Type头的值。
签名:
func (a *Agent) ContentType(contentType string) *Agent
func (a *Agent) ContentTypeBytes(contentType []byte) *Agent
示例:
agent.ContentType("custom-type")
// ...
Host
Host设置Host头。
签名:
func (a *Agent) Host(host string) *Agent
func (a *Agent) HostBytes(host []byte) *Agent
示例:
agent.Host("example.com")
// ...
QueryString
QueryString设置URI查询字符串。
签名:
func (a *Agent) QueryString(queryString string) *Agent
func (a *Agent) QueryStringBytes(queryString []byte) *Agent
示例:
agent.QueryString("foo=bar")
// ...
BasicAuth
BasicAuth使用HTTP Basic Auth设置URI的用户名和密码。
签名:
func (a *Agent) BasicAuth(username, password string) *Agent
func (a *Agent) BasicAuthBytes(username, password []byte) *Agent
示例:
agent.BasicAuth("foo", "bar")
// ...
Body
有几种方法来设置请求正文。
签名:
func (a *Agent) BodyString(bodyString string) *Agent
func (a *Agent) Body(body []byte) *Agent
// BodyStream设置请求正文流和可选的正文大小。
//
// 如果bodySize>=0,那么bodyStream必须准确提供bodySize字节。
// 在返回io.EOF之前。
//
// 如果bodySize<0,那么bodyStream将被读取,直到io.EOF。
//
// bodyStream.Close()在读完所有身体数据后被调用。
// 如果它实现了io.Closer。
//
// 注意,GET和HEAD请求不能有body。
func (a *Agent) BodyStream(bodyStream io.Reader, bodySize int) *Agent
示例:
agent.BodyString("foo=bar")
agent.Body([]byte("bar=baz"))
agent.BodyStream(strings.NewReader("body=stream"), -1)
// ...
JSON
JSON通过设置Content-Type头为application/json
来发送一个JSON请求。
签名:
func (a *Agent) JSON(v interface{}) *Agent
示例:
agent.JSON(fiber.Map{"success": true})
// ...
XML
XML通过设置Content-Type头为application/xml
来发送一个XML请求。
特征:
func (a *Agent) XML(v interface{}) *Agent
示例:
agent.XML(fiber.Map{"success": true})
// ...
Form
Form通过设置Content-Type头为application/x-www-form-urlencoded
来发送一个表单请求。
签名:
// 如果args为非零,表单将发送带正文的表单请求。
//
// 建议通过AcquireArgs获得args,并在性能关键代码中手动释放它。
// 在对性能要求很高的代码中手动释放。
func (a *Agent) Form(args *Args) *Agent
示例:
args := AcquireArgs()
args.Set("foo", "bar")
agent.Form(args)
// ...
ReleaseArgs(args)
MultipartForm
MultipartForm通过设置Content-Type头为multipart/form-data
来发送多部分表单请求。这些请求可以包括key-value和文件。
签名:
// MultipartForm发送带有k-v和文件的多部分表单请求。
//
// 建议通过AcquireArgs获取args,并在性能关键代码中手动释放它。
// 在性能关键的代码中手动释放。
func (a *Agent) MultipartForm(args *Args) *Agent
示例:
args := AcquireArgs()
args.Set("foo", "bar")
agent.MultipartForm(args)
// ...
ReleaseArgs(args)
Fiber提供了几种发送文件的方法。请注意,它们必须在MultipartForm
之前调用。
Boundary
Boundary设置多部分表格请求的边界。
签名:
func (a *Agent) Boundary(boundary string) *Agent
示例:
agent.Boundary("myBoundary")
.MultipartForm(nil)
// ...
SendFile(s)
SendFile 读取一个文件并将其附加到一个多部件表单请求中。Sendfiles可以用来追加多个文件。
签名:
func (a *Agent) SendFile(filename string, fieldname ...string) *Agent
func (a *Agent) SendFiles(filenamesAndFieldnames ...string) *Agent
示例:
agent.SendFile("f", "field name")
.SendFiles("f1", "field name1", "f2").
.MultipartForm(nil)
// ...
FileData
FileData为多部分表单请求添加文件数据。
// FormFile代表多部分表单文件
type FormFile struct {
// Fieldname是表单文件的字段名。
Fieldname string
// 名称是表单文件的名称
Name string
// 内容是表单文件的内容
Content []byte
}
签名:
// FileData为多部分表单请求添加文件。
//
// 建议通过AcquireFormFile获取formFile,并在性能关键代码中手动释放它。
// 在性能关键的代码中手动释放。
func (a *Agent) FileData(formFiles ...*FormFile) *Agent
示例:
ff1 := &FormFile{"filename1", "field name1", []byte("content")}.
ff2 := &FormFile{"filename2", "field name2", []byte("content")}。
agent.FileData(ff1, ff2).
MultipartForm(nil)
// ...
Debug
调试模式可以将请求和响应的细节记录到io.writer
(默认是os.Stdout
)。
签名:
func (a *Agent) Debug(w ...io.Writer) *Agent
示例:
agent.Debug()
// ...
Timeout
Timeout设置请求超时时间。
签名:
func (a *Agent) Timeout(timeout time.Duration) *Agent
示例:
agent.Timeout(time.Second)
// ...
Reuse
重复使用使代理实例在一次请求后可以再次使用。如果代理是可重复使用的,那么当它不再被使用时,应该手动释放。
签名:
func (a *Agent) Reuse() *Agent
示例:
agent.Reuse()
// ...
InsecureSkipVerify
InsecureSkipVerify控制代理是否验证服务器证书链和主机名。
签名:
func (a *Agent) InsecureSkipVerify() *Agent
示例:
agent.InsecureSkipVerify()
// ...
TLSConfig
TLSConfig设置tls配置。
签名:
func (a *Agent) TLSConfig(config *tls.Config) *Agent
示例:
// 创建tls证书
cer, _ := tls.LoadX509KeyPair("pem", "key")
config := &tls.Config{
证书。[]tls.Certificate{cer},
}
agent.TLSConfig(config)
// ...
MaxRedirectsCount
MaxRedirectsCount设置GET和HEAD的最大重定向数。
签名:
func (a *Agent) MaxRedirectsCount(count int) *Agent
示例:
agent.MaxRedirectsCount(7)
// ...
JSONEncoder
JSONEncoder设置自定义json编码器。
签名:
func (a *Agent) JSONEncoder(jsonEncoder utils.JSONMarshal) *Agent
示例:
agent.JSONncoder(json.Marshal)
// ...
JSONDecoder
JSONDecoder设置自定义的json解码器。
签名:
func (a *Agent) JSONDecoder(jsonDecoder utils.JSONUnmarshal) *Agent
示例:
agent.JSONDecoder(json.Unmarshal)
// ...
Request
Request返回Agent请求实例。
签名:
func (a *Agent) Request() *Request
例子:
req := agent.Request()
// ...
SetResponse
SetResponse为Agent实例设置自定义响应。建议通过AcquireResponse获得自定义响应,并在性能关键的代码中手动释放它。
签名:
func (a *Agent) SetResponse(customResp *Response) *Agent
示例:
resp := AcquireResponse()
agent.SetResponse(resp)
// ...
ReleaseResponse(resp)
Dest
Dest设置自定义的dest。dest的内容将被响应体所取代,如果dest太小,将分配一个新的片断。
签名:
func (a *Agent) Dest(dest []byte) *Agent {
示例:
agent.Dest(nil)
// ...
Bytes
Bytes返回url的状态码、字节体和错误。
签名:
func (a *Agent) Bytes() (code int, body [] byte, errs [] error)
示例:
code, body, errs := agent.Bytes()
// ...
String
字符串返回url的状态代码、字符串body和错误。
签名:
func (a *Agent) String() (int, string, [] error)
示例:
code, body, errs := agent.String()
// ...
Struct
Struct返回url的状态代码、字节体和错误。而字节体将被解读为给定的V。
签名:
func (a *Agent) Struct(v interface{}) (code int, body [] byte, errs [] error)
示例:
var d data
code, body, errs := agent.Struct(&d)
// ...
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。