func (c Cookies) Get(name string) string {
	for _, cookie := range c {
		if cookie.Name == name {
			return cookie.Value
		}
	}
	return ""
}
Get gets the cookie value with the given name. If
there are no values associated with the name, Get returns "".
package zhttp
import (
	"bytes"
	"context"
	"io"
	"io/ioutil"
	"net/http"
	"net/http/httputil"
	"strings"
)
type ZBody struct {
	rawBody   io.ReadCloser
	buf       bytes.Buffer
	bufCached bool
	Err       error
}
func (b *ZBody) Read(p []byte) (int, error) {
	if b.Err != nil {
		return 0, b.Err
	}
	return b.rawBody.Read(p)
}
func (b *ZBody) ReadN(n int64) []byte {
	if b.Err != nil {
		return nil
	}
	lr := io.LimitReader(b.rawBody, n)
	tr := io.TeeReader(lr, &(b.buf))
	data, err := ioutil.ReadAll(tr)
	if err != nil && err != io.EOF {
		b.Err = err
		b.ClearCache()
		b.rawBody.Close()
		return nil
	}
	return data
}
func (b *ZBody) fillBuffer() {
	if b.bufCached {
		return
	}
	_, err := io.Copy(&b.buf, b.rawBody)
	b.bufCached = true
	if err != nil && err != io.EOF {
		b.Err = err
		b.ClearCache()
	}
	b.rawBody.Close()
}
func (b *ZBody) String() string {
	if b.Err != nil {
		return ""
	}
	b.fillBuffer()
	return b.buf.String()
}
func (b *ZBody) Bytes() []byte {
	if b.Err != nil {
		return nil
	}
	b.fillBuffer()
	if b.buf.Len() == 0 {
		return nil
	}
	return b.buf.Bytes()
}
func (b *ZBody) Close() error {
	if b.Err != nil {
		return b.Err
	}
	return b.rawBody.Close()
}
func (b *ZBody) ClearCache() {
	if b.buf.Len() > 0 {
		b.buf.Reset()
	}
}
type Headers map[string][]string
func (h Headers) String() string {
	if h == nil {
		return ""
	}
	var buf strings.Builder
	http.Header(h).Write(&buf)
	return buf.String()
}
func (h Headers) Get(key string) string {
	v := http.Header(h).Values(key)
	if len(v) == 0 {
		return ""
	}
	return strings.Join(v, ", ")
}
func (h Headers) Has(key string) bool {
	if h == nil {
		return false
	}
	_, ok := h[http.CanonicalHeaderKey(key)]
	return ok
}
type Cookies []*http.Cookie
func (c Cookies) String() string {
	if len(c) == 0 {
		return ""
	}
	var buf strings.Builder
	for i, cookie := range c {
		buf.WriteString(cookie.Name)
		buf.WriteRune('=')
		buf.WriteString(cookie.Value)
		if i < len(c)-1 {
			buf.WriteString("; ")
		}
	}
	return buf.String()
}