Documentation ¶
Overview ¶
Package httpKit
请求头 || 响应头 key: 不区分大小写
Index ¶
- Constants
- Variables
- func AddHeader(header http.Header, key, value string)
- func AddHeaderIfMissing(header http.Header, key, value string)
- func AddHeaderIfMissingIgnoreCase(header http.Header, key, value string)
- func AssertHttpUrl(httpUrl string) error
- func DelHeader(header http.Header, key string)
- func GetAcceptLanguages(req *http.Request) []string
- func GetCertificateInfo(url string) (*x509.Certificate, error)
- func GetClientIP(r *http.Request) string
- func GetClientIPFromHeader(r *http.Request) string
- func GetClientScheme(req *http.Request) string
- func GetFormFile(r *http.Request, key string, maxMemory int64) (multipart.File, *multipart.FileHeader, error)
- func GetHeader(header http.Header, key string) string
- func GetHeaderValues(header http.Header, key string) []string
- func GetHost(req *http.Request) string
- func GetMethod(req *http.Request) string
- func GetOrigin(header http.Header) string
- func GetProto(req *http.Request) string
- func GetRawQuery(req *http.Request) string
- func GetReferer(r *http.Request) string
- func GetRemoteIP(r *http.Request) string
- func GetRequestUrl(req *http.Request) string
- func GetRoute(req *http.Request) string
- func GetRouteWithQuery(req *http.Request) string
- func GetScheme(req *http.Request) string
- func GetUserAgent(header http.Header) string
- func HeaderContainsValue(header http.Header, key, value string) bool
- func HeaderContainsValueIgnoreCase(header http.Header, key, value string) bool
- func HeaderToMap(header http.Header) map[string]interface{}
- func HeaderToString(header http.Header) (string, error)
- func IsValidStatusCode(code int) bool
- func MakeRequestBodySeekable(req *http.Request) error
- func ObtainGetParam(r *http.Request, key string) string
- func ObtainPostParam(r *http.Request, key string) (string, error)
- func OverrideRequestBody(req *http.Request, m map[string][]string) error
- func PolyfillContextPath(relativePath string) string
- func Redirect(w http.ResponseWriter, r *http.Request, url string, code int) error
- func ResetRequestBody(req *http.Request) error
- func RespondData(w http.ResponseWriter, code int, contentType string, data []byte) error
- func RespondFile(w http.ResponseWriter, r *http.Request, code int, filePath, fileName string) error
- func RespondJson(w http.ResponseWriter, code int, obj any) error
- func RespondString(w http.ResponseWriter, code int, format string, values ...any) error
- func RespondStringData(w http.ResponseWriter, code int, data []byte) error
- func SetHeader(header http.Header, key, value string)
- func SetHeaderIfMissing(header http.Header, key, value string)
- func SetHeaderIfMissingIgnoreCase(header http.Header, key, value string)
- func SetHost(req *http.Request, newHost string)
- func Status(w http.ResponseWriter, code int)
- func ToRequestBodyString(m map[string][]string) string
- func TryToResetRequestBody(req *http.Request) (err error)
- type Repeat
Constants ¶
const ( // PlainContentType 纯文本格式. PlainContentType = "text/plain; charset=utf-8" // JsonContentType JSON数据格式. JsonContentType = "application/json; charset=utf-8" // XmlContentType XML数据格式. XmlContentType = "text/xml; charset=utf-8" // FormUrlencodedContentType 适用于 POST 请求. /* application/x-www-form-urlencoded: 将键值对的参数用&连接起来,如果有空格,将空格转换为+加号;有特殊符号,将特殊符号转换为ASCII HEX值. application/x-www-form-urlencoded是浏览器默认的编码格式,对于Get请求,是将参数转换?key=value&key=value格式,连接到url后. */ FormUrlencodedContentType = "application/x-www-form-urlencoded; charset=utf-8" // OctetStreamContentType 二进制流数据(如常见的文件下载). /* 参考:https://www.runoob.com/http/http-content-type.html */ OctetStreamContentType = "application/octet-stream; charset=utf-8" )
const ( HeaderAccept = "Accept" HeaderAcceptEncoding = "Accept-Encoding" HeaderAcceptLanguage = "Accept-Language" HeaderAccessControlAllowCredentials = "Access-Control-Allow-Credentials" HeaderAccessControlAllowHeaders = "Access-Control-Allow-Headers" HeaderAccessControlAllowMethods = "Access-Control-Allow-Methods" HeaderAccessControlAllowOrigin = "Access-Control-Allow-Origin" HeaderAccessControlMaxAge = "Access-Control-Max-Age" HeaderAllow = "Allow" HeaderCacheControl = "Cache-Control" HeaderContentType = "Content-Type" HeaderConnection = "Connection" HeaderDate = "Date" HeaderHost = "Host" HeaderOrigin = "Origin" HeaderSetCookie = "Set-Cookie" HeaderVary = "Vary" HeaderUpgrade = "Upgrade" HeaderXXSSProtection = "X-XSS-Protection" HeaderChimeraProxy = "Chimera-Proxy" )
Variables ¶
var ( // GetRequestPublicIp 获取http请求的 "公网ip". /* 涉及的请求头: (1) "X-Forwarded-For" (2) "X-Real-Ip" */ GetRequestPublicIp func(req *http.Request) string = netutil.GetRequestPublicIp )
var ( // GetStatusText 获取 http状态码 的描述文本. GetStatusText func(code int) string = http.StatusText )
var (
NotSeekableError = errorKit.Newf("request body is not seekable")
)
var (
RemoteIPHeaders = []string{"X-Forwarded-For", "X-Real-IP"}
)
Functions ¶
func AddHeader ¶
AddHeader
PS: key对应的 切片 中,在 最后面 添加value.
e.g.
header := make(map[string][]string) AddHeader(header, "k", "0") fmt.Println(header) // map[K:[0]] AddHeader(header, "k", "1") fmt.Println(header) // map[K:[0 1]] AddHeader(header, "k", "1") fmt.Println(header) // map[K:[0 1 1]]
func AssertHttpUrl ¶
func GetAcceptLanguages ¶ added in v3.0.19
GetAcceptLanguages 根据请求头"Accept-Language".
func GetCertificateInfo ¶ added in v3.0.910
func GetCertificateInfo(url string) (*x509.Certificate, error)
GetCertificateInfo
获取https过期时间
https://www.topgoer.cn/docs/gochajian/gofdgjh
@return 仅返回第一个证书信息(有多个的话)
func GetClientScheme ¶
GetClientScheme 客户端发送的原始请求 使用的Web协议.
!!!: 返回值不一定准确,除非 代理s 好好配合(有的话).
@return "http" || "https"
func GetFormFile ¶
func GetFormFile(r *http.Request, key string, maxMemory int64) (multipart.File, *multipart.FileHeader, error)
GetFormFile
[Go] golang获取http中的get传递的参数
https://www.cnblogs.com/taoshihan/p/12943118.html
@param maxMemory 可以为-1,此时将采用默认值
func GetRemoteIP ¶
GetRemoteIP 获取客户端IP地址(客户端的远程IP地址).
PS: 参考 gin's Context.RemoteIP().
e.g. 当客户端通过代理服务器连接时,RemoteIP() 返回代理服务器的 IP 地址
func GetRouteWithQuery ¶
GetRouteWithQuery 获取: 路由(带query).
e.g.
http://127.0.0.1/a/b?1=1&2=2 => "/a/b?1=1&2=2"
func GetUserAgent ¶
GetUserAgent 获取http请求头中"User Agent"的值.
参考: https://www.sunzhongwei.com/golang-gin-for-user-agent-in-http-request-header-value
e.g. Chrome浏览器: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36 Safari浏览器: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Safari/605.1.15
func HeaderContainsValueIgnoreCase ¶
HeaderContainsValueIgnoreCase Header中,指定key对应的value切片是否包含指定value?\
PS: 不区分大小写.
func HeaderToMap ¶
HeaderToMap http.Header(即 map[string][]string) => map[string]interface{}
func HeaderToString ¶ added in v3.0.909
HeaderToString Converts http header to a string.
func IsValidStatusCode ¶ added in v3.0.903
IsValidStatusCode 响应的 http状态码 是否有效?
PS: (1) 判断参考了 jQuery; (2) 正常情况下,响应的http状态码有效的情况下,才会去读取响应的body.
func MakeRequestBodySeekable ¶
MakeRequestBodySeekable
Go语言: 如何让 request.Body 可以多次读取
https://www.cnblogs.com/ayanmw/p/17191530.html
PS: (1) 一般与 proxy() 搭配使用; (2) 某个路由涉及代理(请求转发)的话,需要在handler里面 首先 调用此方法; (3) 请求有内容的话,会全部读取一遍请求体内容.
func ObtainGetParam ¶
ObtainGetParam
[Go] golang获取http中的get传递的参数
https://www.cnblogs.com/taoshihan/p/12943118.html
func ObtainPostParam ¶
ObtainPostParam
[Go] golang获取http中的get传递的参数
https://www.cnblogs.com/taoshihan/p/12943118.html
func OverrideRequestBody ¶
OverrideRequestBody 覆盖 POST请求 的请求体(request body).
func PolyfillContextPath ¶
PolyfillContextPath *
- e.g.
- "" => ""
- "/" => "/"
- "//" => "/"
- "///" => "/"
- "/c/////c//" => "/c/c/" *
- @return 优化过的ContextPath
func Redirect ¶ added in v3.0.909
Redirect 请求重定向.
PS: 301: http.StatusMovedPermanently 表示资源已被永久移动到新位置,以后对该资源的请求都应使用新的URL。 302: http.StatusFound 有时称为"Moved Temporarily",表示资源临时被移动到另一个位置,客户端应继续使用原有URL进行以后的请求。 303: http.StatusSeeOther 指示客户端应使用GET方法访问另一个URL以获取资源,通常用于在POST请求后重定向到一个新的资源。 307: http.StatusTemporaryRedirect 表示资源临时被移动到另一个位置,但客户端应继续使用原有URL进行以后的请求(与302不同的是,307要求重定向请求方法和主体不变)。 308: http.StatusPermanentRedirect 表示资源已被永久移动到新位置,客户端以后应使用新的URL进行请求(与301不同的是,308要求重定向请求方法和主体不变)。
!!!选择使用: (1) 302:当重定向后的操作不需要保持原请求方法(例如将POST转换为GET是可以接受的)时使用。 (2) 307:当需要保持原请求方法(例如POST必须保持为POST)时使用,以确保请求数据和操作的正确传递。
@param url e.g. 完整的网址
"https://www.baidu.com" e.g.1 仅仅是路由 "/b"
@param code (1) [300, 308] || 201
(2) Richelieu: 推荐使用 307 或 308
func ResetRequestBody ¶
ResetRequestBody 重置请求体,以防: 已经读完body了,请求转发给别人,别人收到的请求没内容.
func RespondFile ¶
RespondFile 响应文件
参考: gin里面的 Context.File() 和 Context.FileAttachment() .
@param filePath 文件路径 @param fileName 文件名(可以为"",此时将从 传参filePath 中获取) @return 如果不为nil,建议输出到控制台
func RespondJson ¶
func RespondJson(w http.ResponseWriter, code int, obj any) error
RespondJson
参考: gin里面的 Context.JSON() .
func RespondStringData ¶
func RespondStringData(w http.ResponseWriter, code int, data []byte) error
func SetHeader ¶
SetHeader
e.g.
header := make(map[string][]string) httpKit.AddHeader(header, "k", "0") fmt.Println(header) // map[K:[0]] httpKit.AddHeader(header, "k", "1") fmt.Println(header) // map[K:[0 1]] httpKit.SetHeader(header, "k", "2") fmt.Println(header) // map[K:[2]] httpKit.SetHeader(header, "k", "") fmt.Println(header) // map[]
func Status ¶
func Status(w http.ResponseWriter, code int)
Status 设置响应的http状态码
PS: (1) 不建议多次设置 http状态码; (2) 如果多次设置的话,感觉 第一次设置的值 会生效.
@param code -1: 不设置http状态码
func ToRequestBodyString ¶
ToRequestBodyString
条件: (1) POST (2) x-www-form-urlencoded
e.g.
m := map[string][]string{ "a": []string{"test"}, "b": []string{"测试"}, } fmt.Println(ToRequestBodyString(m)) // a=test&b=%E6%B5%8B%E8%AF%95
func TryToResetRequestBody ¶
Types ¶
Source Files ¶
- assert.go
- bean.go
- certificate.go
- consts.go
- content_type.go
- context_path.go
- header.go
- header_content_type.go
- header_host.go
- header_key.go
- header_language.go
- header_origin.go
- header_referer.go
- header_user_agent.go
- param.go
- redirect.go
- request_body.go
- request_info.go
- request_info_ip.go
- request_info_scheme.go
- respond.go
- status_code.go