|
|
|
@ -12,14 +12,29 @@ import (
|
|
|
|
|
"strings"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type HttpHeaders map[string][]string
|
|
|
|
|
|
|
|
|
|
type LineReader interface {
|
|
|
|
|
ReadLine() (line []byte, isPrefix bool, err error)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (h HttpHeaders) Value(key string)string {
|
|
|
|
|
values,ok:=h[key]
|
|
|
|
|
if !ok{
|
|
|
|
|
return ""
|
|
|
|
|
}
|
|
|
|
|
return values[0]
|
|
|
|
|
}
|
|
|
|
|
func (h HttpHeaders) Values(key string)[]string {
|
|
|
|
|
return h[key]
|
|
|
|
|
}
|
|
|
|
|
func (h HttpHeaders) SetValue(key,value string) {
|
|
|
|
|
h[key] = append(h[key],value)
|
|
|
|
|
}
|
|
|
|
|
// @return firstLine: request的request line或response的status line
|
|
|
|
|
// @return headers: request header fileds的键值对
|
|
|
|
|
func ReadHttpHeader(r LineReader) (firstLine string, headers map[string][]string, err error) {
|
|
|
|
|
headers = make(map[string][]string)
|
|
|
|
|
func ReadHttpHeader(r LineReader) (firstLine string, headers HttpHeaders, err error) {
|
|
|
|
|
headers = make(HttpHeaders)
|
|
|
|
|
|
|
|
|
|
var line []byte
|
|
|
|
|
var isPrefix bool
|
|
|
|
@ -51,7 +66,7 @@ func ReadHttpHeader(r LineReader) (firstLine string, headers map[string][]string
|
|
|
|
|
err = ErrHttpHeader
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
headers[strings.Trim(l[0:pos], " ")] = append(headers[strings.Trim(l[0:pos], " ")],strings.Trim(l[pos+1:], " "))
|
|
|
|
|
headers.SetValue(strings.Trim(l[0:pos], " "),strings.Trim(l[pos+1:], " "))
|
|
|
|
|
}
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|