aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetar Maymounkov <petarm@gmail.com>2010-03-16 13:57:16 -0700
committerRuss Cox <rsc@golang.org>2010-03-16 13:57:16 -0700
commit7f4c2caea52fbda9a79ad6a804155050f36732b6 (patch)
tree103ab7b9f0286da254414fae701181e07c083a2f
parent354679d91076d12666a4df8d945404b468e28454 (diff)
downloadgo-7f4c2caea52fbda9a79ad6a804155050f36732b6.tar.gz
go-7f4c2caea52fbda9a79ad6a804155050f36732b6.zip
http: add ParseQuery
R=rsc CC=golang-dev https://golang.org/cl/238041
-rw-r--r--src/pkg/http/request.go10
-rw-r--r--src/pkg/http/request_test.go3
2 files changed, 8 insertions, 5 deletions
diff --git a/src/pkg/http/request.go b/src/pkg/http/request.go
index 82701adc66..33c12c024a 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 f5b575c957..98d5342bbb 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