100 lines
2.1 KiB
Go
100 lines
2.1 KiB
Go
|
|
package starnet
|
|||
|
|
|
|||
|
|
import "net/http"
|
|||
|
|
|
|||
|
|
// WithHeader 设置 Header
|
|||
|
|
func WithHeader(key, value string) RequestOpt {
|
|||
|
|
return func(r *Request) error {
|
|||
|
|
if isHostHeaderKey(key) {
|
|||
|
|
setRequestHostConfig(r.config, value)
|
|||
|
|
return nil
|
|||
|
|
}
|
|||
|
|
r.config.Headers.Set(key, value)
|
|||
|
|
return nil
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// WithHost 设置显式 Host 头覆盖。
|
|||
|
|
func WithHost(host string) RequestOpt {
|
|||
|
|
return func(r *Request) error {
|
|||
|
|
setRequestHostConfig(r.config, host)
|
|||
|
|
return nil
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// WithHeaders 批量设置 Headers
|
|||
|
|
func WithHeaders(headers map[string]string) RequestOpt {
|
|||
|
|
return func(r *Request) error {
|
|||
|
|
for key, value := range headers {
|
|||
|
|
if isHostHeaderKey(key) {
|
|||
|
|
setRequestHostConfig(r.config, value)
|
|||
|
|
continue
|
|||
|
|
}
|
|||
|
|
r.config.Headers.Set(key, value)
|
|||
|
|
}
|
|||
|
|
return nil
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// WithContentType 设置 Content-Type
|
|||
|
|
func WithContentType(contentType string) RequestOpt {
|
|||
|
|
return func(r *Request) error {
|
|||
|
|
r.config.Headers.Set("Content-Type", contentType)
|
|||
|
|
return nil
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// WithUserAgent 设置 User-Agent
|
|||
|
|
func WithUserAgent(userAgent string) RequestOpt {
|
|||
|
|
return func(r *Request) error {
|
|||
|
|
r.config.Headers.Set("User-Agent", userAgent)
|
|||
|
|
return nil
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// WithBearerToken 设置 Bearer Token
|
|||
|
|
func WithBearerToken(token string) RequestOpt {
|
|||
|
|
return func(r *Request) error {
|
|||
|
|
r.config.Headers.Set("Authorization", "Bearer "+token)
|
|||
|
|
return nil
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// WithCookie 添加 Cookie
|
|||
|
|
func WithCookie(name, value, path string) RequestOpt {
|
|||
|
|
return func(r *Request) error {
|
|||
|
|
r.config.Cookies = append(r.config.Cookies, &http.Cookie{
|
|||
|
|
Name: name,
|
|||
|
|
Value: value,
|
|||
|
|
Path: path,
|
|||
|
|
})
|
|||
|
|
return nil
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// WithSimpleCookie 添加简单 Cookie(path 为 /)
|
|||
|
|
func WithSimpleCookie(name, value string) RequestOpt {
|
|||
|
|
return func(r *Request) error {
|
|||
|
|
r.config.Cookies = append(r.config.Cookies, &http.Cookie{
|
|||
|
|
Name: name,
|
|||
|
|
Value: value,
|
|||
|
|
Path: "/",
|
|||
|
|
})
|
|||
|
|
return nil
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// WithCookies 批量添加 Cookies
|
|||
|
|
func WithCookies(cookies map[string]string) RequestOpt {
|
|||
|
|
return func(r *Request) error {
|
|||
|
|
for name, value := range cookies {
|
|||
|
|
r.config.Cookies = append(r.config.Cookies, &http.Cookie{
|
|||
|
|
Name: name,
|
|||
|
|
Value: value,
|
|||
|
|
Path: "/",
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
return nil
|
|||
|
|
}
|
|||
|
|
}
|