mirror of
https://github.com/eolinker/apinto
synced 2025-10-05 08:47:04 +08:00
111 lines
2.1 KiB
Go
111 lines
2.1 KiB
Go
package http_context
|
|
|
|
import (
|
|
"net/http"
|
|
"strconv"
|
|
"strings"
|
|
|
|
http_service "github.com/eolinker/eosc/http-service"
|
|
|
|
"github.com/valyala/fasthttp"
|
|
)
|
|
|
|
var _ http_service.IResponse = (*Response)(nil)
|
|
|
|
type Response struct {
|
|
response *fasthttp.Response
|
|
headers http.Header
|
|
code int
|
|
status string
|
|
}
|
|
|
|
func (r *Response) Headers() http.Header {
|
|
if r.headers == nil {
|
|
r.headers = make(http.Header)
|
|
hs := strings.Split(r.response.Header.String(), "\r\n")
|
|
for _, h := range hs {
|
|
vs := strings.Split(h, ":")
|
|
if len(vs) < 2 {
|
|
if vs[0] == "" {
|
|
continue
|
|
}
|
|
r.headers[vs[0]] = []string{""}
|
|
continue
|
|
}
|
|
r.headers[vs[0]] = []string{strings.TrimSpace(vs[1])}
|
|
}
|
|
}
|
|
return r.headers
|
|
}
|
|
|
|
func NewResponse(response *fasthttp.Response) *Response {
|
|
return &Response{response: response}
|
|
}
|
|
|
|
func (r *Response) initHeader() {
|
|
r.headers = make(http.Header)
|
|
hs := strings.Split(r.response.Header.String(), "\r\n")
|
|
for _, h := range hs {
|
|
vs := strings.Split(h, ":")
|
|
if len(vs) < 2 {
|
|
if vs[0] == "" {
|
|
continue
|
|
}
|
|
r.headers[vs[0]] = []string{""}
|
|
continue
|
|
}
|
|
r.headers[vs[0]] = []string{strings.TrimSpace(vs[1])}
|
|
}
|
|
}
|
|
|
|
func (r *Response) GetHeader(name string) string {
|
|
if r.headers == nil {
|
|
r.initHeader()
|
|
}
|
|
return r.headers.Get(name)
|
|
}
|
|
|
|
func (r *Response) GetBody() []byte {
|
|
return r.response.Body()
|
|
}
|
|
|
|
func (r *Response) StatusCode() int {
|
|
return r.response.StatusCode()
|
|
}
|
|
|
|
func (r *Response) Status() string {
|
|
return strconv.Itoa(r.response.StatusCode())
|
|
}
|
|
|
|
func (r *Response) SetHeader(key, value string) {
|
|
if r.headers == nil {
|
|
r.response.Header.Set(key, value)
|
|
return
|
|
}
|
|
r.headers.Set(key, value)
|
|
}
|
|
|
|
func (r *Response) AddHeader(key, value string) {
|
|
if r.headers == nil {
|
|
r.response.Header.Add(key, value)
|
|
return
|
|
}
|
|
r.headers.Add(key, value)
|
|
}
|
|
|
|
func (r *Response) DelHeader(key string) {
|
|
if r.headers == nil {
|
|
r.response.Header.Del(key)
|
|
return
|
|
}
|
|
r.headers.Del(key)
|
|
}
|
|
|
|
func (r *Response) SetStatus(code int, status string) {
|
|
r.code, r.status = code, status
|
|
}
|
|
|
|
func (r *Response) SetBody(bytes []byte) {
|
|
r.response.SetBody(bytes)
|
|
}
|