代码拉取完成,页面将自动刷新
package http
import (
"errors"
"fmt"
"strconv"
)
// ResponseEncode 编码器, 把response编码为字节流并写入缓冲区
type ResponseEncode struct{}
func (r *ResponseEncode) Encode(response *Response) (err error) {
defer func() {
if e := recover(); e != nil {
err = errors.New(fmt.Sprintln("Error encoding response,", e))
}
}()
if response == nil {
return errors.New("response cannot be nil")
}
if response.BufWriter == nil {
return errors.New("response.BufWriter cannot be nil")
}
r.line(response)
r.header(response)
r.body(response)
return response.BufWriter.Flush()
}
func (r *ResponseEncode) line(response *Response) {
if err := response.BufWriter.WriteString(response.Proto + " "); err != nil {
panic(err)
}
if err := response.BufWriter.WriteString(strconv.Itoa(response.statusCode) + " "); err != nil {
panic(err)
}
if err := response.BufWriter.WriteString(response.statusText); err != nil {
panic(err)
}
if err := response.BufWriter.WriteBytes(crlf); err != nil {
panic(err)
}
}
func (r *ResponseEncode) header(response *Response) {
buffer := response.BufWriter.WriteBuffer()
if response.Server != "" {
if err := writeHeader(buffer, "Server", response.Server); err != nil {
panic(err)
}
}
if response.body != nil && response.body.size > 0 {
if err := writeHeader(buffer, "Content-Length", strconv.FormatInt(response.body.size, 10)); err != nil {
panic(err)
}
}
if response.Header != nil {
for name, values := range response.Header {
if values == nil || len(values) == 0 {
continue
}
for i := 0; i < len(values); i++ {
if name == "Cookie" {
r.cookie(response)
continue
}
if err := writeHeader(buffer, name, values[i]); err != nil {
panic(err)
}
}
}
}
if err := response.BufWriter.WriteBytes(crlf); err != nil {
panic(err)
}
}
// 编码cookie
func (r *ResponseEncode) cookie(response *Response) {
cookies := response.Cookies()
if cookies == nil {
return
}
for _, cookie := range cookies[:] {
if err := writeHeader(response.BufWriter.WriteBuffer(), "Set-Cookie", cookie.String()); err != nil {
panic(err)
}
}
}
func (r *ResponseEncode) body(response *Response) {
if response.body != nil && response.body.size > 0 {
if _, err := response.BufWriter.WriteBuffer().ReadFrom(response.body); err != nil {
panic(err)
}
}
}
func NewResponseEncode() *ResponseEncode {
return &ResponseEncode{}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。