Files
apinto/node/http-context/response.go
2021-11-11 20:23:52 +08:00

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)
}