mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
httputil: move dump and chunking functions out of http
This moves DumpRequest, DumpResponse, NewChunkedReader, and NewChunkedWriter out of http, as part of the continued http diet plan. Also, adds DumpRequestOut (for dumping outbound requests), since DumpRequest's ambiguity (the "wire representation" in what direction?) was often a source of confusion and bug reports. R=rsc, adg CC=golang-dev https://golang.org/cl/5339041
This commit is contained in:
parent
88cf76a9b3
commit
28564d60eb
11 changed files with 468 additions and 179 deletions
|
|
@ -69,13 +69,6 @@ var reqWriteExcludeHeader = map[string]bool{
|
|||
"Trailer": true,
|
||||
}
|
||||
|
||||
var reqWriteExcludeHeaderDump = map[string]bool{
|
||||
"Host": true, // not in Header map anyway
|
||||
"Content-Length": true,
|
||||
"Transfer-Encoding": true,
|
||||
"Trailer": true,
|
||||
}
|
||||
|
||||
// A Request represents a parsed HTTP request header.
|
||||
type Request struct {
|
||||
Method string // GET, POST, PUT, etc.
|
||||
|
|
@ -286,51 +279,6 @@ func (req *Request) WriteProxy(w io.Writer) error {
|
|||
return req.write(w, true, nil)
|
||||
}
|
||||
|
||||
func (req *Request) dumpWrite(w io.Writer) error {
|
||||
// TODO(bradfitz): RawPath here?
|
||||
urlStr := valueOrDefault(req.URL.EncodedPath(), "/")
|
||||
if req.URL.RawQuery != "" {
|
||||
urlStr += "?" + req.URL.RawQuery
|
||||
}
|
||||
|
||||
bw := bufio.NewWriter(w)
|
||||
fmt.Fprintf(bw, "%s %s HTTP/%d.%d\r\n", valueOrDefault(req.Method, "GET"), urlStr,
|
||||
req.ProtoMajor, req.ProtoMinor)
|
||||
|
||||
host := req.Host
|
||||
if host == "" && req.URL != nil {
|
||||
host = req.URL.Host
|
||||
}
|
||||
if host != "" {
|
||||
fmt.Fprintf(bw, "Host: %s\r\n", host)
|
||||
}
|
||||
|
||||
// Process Body,ContentLength,Close,Trailer
|
||||
tw, err := newTransferWriter(req)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = tw.WriteHeader(bw)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = req.Header.WriteSubset(bw, reqWriteExcludeHeaderDump)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
io.WriteString(bw, "\r\n")
|
||||
|
||||
// Write body and trailer
|
||||
err = tw.WriteBody(bw)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
bw.Flush()
|
||||
return nil
|
||||
}
|
||||
|
||||
// extraHeaders may be nil
|
||||
func (req *Request) write(w io.Writer, usingProxy bool, extraHeaders Header) error {
|
||||
host := req.Host
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue