diff options
author | Petar Maymounkov <petarm@gmail.com> | 2010-03-16 13:57:16 -0700 |
---|---|---|
committer | Petar Maymounkov <petarm@gmail.com> | 2010-03-16 13:57:16 -0700 |
commit | a4432de182c0c06703bae9f91d12315f83e444f2 (patch) | |
tree | 035c097e81f9fecae4004a4b679c486c18fa9d35 | |
parent | 38a0d97cd500bc36519c0d0e3f90e984894b678f (diff) | |
download | golang-a4432de182c0c06703bae9f91d12315f83e444f2.tar.gz |
http: add ParseQuery
R=rsc
CC=golang-dev
http://codereview.appspot.com/238041
Committer: Russ Cox <rsc@golang.org>
-rw-r--r-- | src/pkg/http/request.go | 10 | ||||
-rw-r--r-- | src/pkg/http/request_test.go | 3 |
2 files changed, 8 insertions, 5 deletions
diff --git a/src/pkg/http/request.go b/src/pkg/http/request.go index 82701adc6..33c12c024 100644 --- a/src/pkg/http/request.go +++ b/src/pkg/http/request.go @@ -571,7 +571,7 @@ func ReadRequest(b *bufio.Reader) (req *Request, err os.Error) { return req, nil } -func parseForm(m map[string][]string, query string) (err os.Error) { +func ParseQuery(query string) (m map[string][]string, err os.Error) { data := make(map[string]*vector.StringVector) for _, kv := range strings.Split(query, "&", 0) { kvPair := strings.Split(kv, "=", 2) @@ -594,6 +594,7 @@ func parseForm(m map[string][]string, query string) (err os.Error) { vec.Push(value) } + m = make(map[string][]string) for k, vec := range data { m[k] = vec.Data() } @@ -607,7 +608,6 @@ func (r *Request) ParseForm() (err os.Error) { if r.Form != nil { return } - r.Form = make(map[string][]string) var query string switch r.Method { @@ -615,6 +615,7 @@ func (r *Request) ParseForm() (err os.Error) { query = r.URL.RawQuery case "POST": if r.Body == nil { + r.Form = make(map[string][]string) return os.ErrorString("missing form body") } ct, _ := r.Header["Content-Type"] @@ -622,15 +623,18 @@ func (r *Request) ParseForm() (err os.Error) { case "text/plain", "application/x-www-form-urlencoded", "": var b []byte if b, err = ioutil.ReadAll(r.Body); err != nil { + r.Form = make(map[string][]string) return err } query = string(b) // TODO(dsymonds): Handle multipart/form-data default: + r.Form = make(map[string][]string) return &badStringError{"unknown Content-Type", ct} } } - return parseForm(r.Form, query) + r.Form, err = ParseQuery(query) + return } // FormValue returns the first value for the named component of the query. diff --git a/src/pkg/http/request_test.go b/src/pkg/http/request_test.go index f5b575c95..98d5342bb 100644 --- a/src/pkg/http/request_test.go +++ b/src/pkg/http/request_test.go @@ -33,8 +33,7 @@ var parseTests = []parseTest{ func TestParseForm(t *testing.T) { for i, test := range parseTests { - form := make(map[string][]string) - err := parseForm(form, test.query) + form, err := ParseQuery(test.query) if err != nil { t.Errorf("test %d: Unexpected error: %v", i, err) continue |