diff --git a/httpbin/handlers.go b/httpbin/handlers.go index 322fc5b30eaffedec2825d540c29ab1117877a7c..a3251015bae8e951f887bcab518314679981676a 100644 --- a/httpbin/handlers.go +++ b/httpbin/handlers.go @@ -4,7 +4,6 @@ import ( "encoding/json" "fmt" "net/http" - "net/url" "strconv" "strings" ) @@ -35,13 +34,8 @@ func (h *HTTPBin) UTF8(w http.ResponseWriter, r *http.Request) { // Get handles HTTP GET requests func (h *HTTPBin) Get(w http.ResponseWriter, r *http.Request) { - args, err := url.ParseQuery(r.URL.RawQuery) - if err != nil { - http.Error(w, fmt.Sprintf("error parsing query params: %s", err), http.StatusBadRequest) - return - } resp := &getResponse{ - Args: args, + Args: r.URL.Query(), Headers: r.Header, Origin: getOrigin(r), URL: getURL(r).String(), @@ -52,20 +46,14 @@ func (h *HTTPBin) Get(w http.ResponseWriter, r *http.Request) { // RequestWithBody handles POST, PUT, and PATCH requests func (h *HTTPBin) RequestWithBody(w http.ResponseWriter, r *http.Request) { - args, err := url.ParseQuery(r.URL.RawQuery) - if err != nil { - http.Error(w, fmt.Sprintf("error parsing query params: %s", err), http.StatusBadRequest) - return - } - resp := &bodyResponse{ - Args: args, + Args: r.URL.Query(), Headers: r.Header, Origin: getOrigin(r), URL: getURL(r).String(), } - err = parseBody(w, r, resp, h.options.MaxMemory) + err := parseBody(w, r, resp, h.options.MaxMemory) if err != nil { http.Error(w, fmt.Sprintf("error parsing request body: %s", err), http.StatusBadRequest) } @@ -179,12 +167,7 @@ func (h *HTTPBin) Status(w http.ResponseWriter, r *http.Request) { // ResponseHeaders responds with a map of header values func (h *HTTPBin) ResponseHeaders(w http.ResponseWriter, r *http.Request) { - args, err := url.ParseQuery(r.URL.RawQuery) - if err != nil { - http.Error(w, fmt.Sprintf("error parsing query params: %s", err), http.StatusBadRequest) - return - } - + args := r.URL.Query() for k, vs := range args { for _, v := range vs { w.Header().Add(http.CanonicalHeaderKey(k), v) diff --git a/httpbin/handlers_test.go b/httpbin/handlers_test.go index bed1d976fb29b9282fbbd5d5ca10d20c555c8fe0..5dd6e9489a81739eda684ebe8f50d4971bcf164b 100644 --- a/httpbin/handlers_test.go +++ b/httpbin/handlers_test.go @@ -141,14 +141,6 @@ func TestGet__WithParams(t *testing.T) { } } -func TestGet__InvalidQuery(t *testing.T) { - r, _ := http.NewRequest("GET", "/get?foo=%ZZ", nil) - w := httptest.NewRecorder() - handler.ServeHTTP(w, r) - - assertStatusCode(t, w, http.StatusBadRequest) -} - func TestGet__OnlyAllowsGets(t *testing.T) { r, _ := http.NewRequest("POST", "/get", nil) w := httptest.NewRecorder() @@ -540,13 +532,6 @@ func TestPost__BodyTooBig(t *testing.T) { assertContentType(t, w, "application/json; encoding=utf-8") } -func TestPost__InvalidQueryParams(t *testing.T) { - r, _ := http.NewRequest("POST", "/post?foo=%ZZ", nil) - w := httptest.NewRecorder() - handler.ServeHTTP(w, r) - assertStatusCode(t, w, http.StatusBadRequest) -} - func TestPost__QueryParams(t *testing.T) { params := url.Values{} params.Set("foo", "foo") @@ -743,14 +728,7 @@ func TestResponseHeaders__OverrideContentType(t *testing.T) { assertContentType(t, w, contentType) } -func TestResponseHeaders__InvalidQuery(t *testing.T) { - r, _ := http.NewRequest("GET", "/response-headers?foo=%ZZ", nil) - w := httptest.NewRecorder() - handler.ServeHTTP(w, r) - assertStatusCode(t, w, http.StatusBadRequest) -} - -func TestRedirects__OK(t *testing.T) { +func TestAbsoluteAndRelativeRedirects__OK(t *testing.T) { var tests = []struct { relative bool n int @@ -782,7 +760,7 @@ func TestRedirects__OK(t *testing.T) { } } -func TestRedirects__Errors(t *testing.T) { +func TestAbsoluteAndRelativeRedirects__Errors(t *testing.T) { var tests = []struct { relative bool given interface{}