diff --git a/http.go b/http.go index 8dd2fee..d8685c5 100644 --- a/http.go +++ b/http.go @@ -76,6 +76,15 @@ func (req *Request) SetRequestURIBytes(requestURI []byte) { req.parsedURI = false } +// RequestURI returns request's URI. +func (req *Request) RequestURI() []byte { + if req.parsedURI { + requestURI := req.uri.RequestURI() + req.SetRequestURIBytes(requestURI) + } + return req.Header.RequestURI() +} + // StatusCode returns response status code. func (resp *Response) StatusCode() int { return resp.Header.StatusCode() diff --git a/http_test.go b/http_test.go index eb01db5..3cbce04 100644 --- a/http_test.go +++ b/http_test.go @@ -11,6 +11,34 @@ import ( "testing" ) +func TestRequestRequestURI(t *testing.T) { + var r Request + + // Set request uri via SetRequestURI() + uri := "/foo/bar?baz" + r.SetRequestURI(uri) + if string(r.RequestURI()) != uri { + t.Fatalf("unexpected request uri %q. Expecting %q", r.RequestURI(), uri) + } + + // Set request uri via Request.URI().Update() + r.Reset() + uri = "/aa/bbb?ccc=sdfsdf" + r.URI().Update(uri) + if string(r.RequestURI()) != uri { + t.Fatalf("unexpected request uri %q. Expecting %q", r.RequestURI(), uri) + } + + // update query args in the request uri + qa := r.URI().QueryArgs() + qa.Reset() + qa.Set("foo", "bar") + uri = "/aa/bbb?foo=bar" + if string(r.RequestURI()) != uri { + t.Fatalf("unexpected request uri %q. Expecting %q", r.RequestURI(), uri) + } +} + func TestRequestUpdateURI(t *testing.T) { var r Request r.Header.SetHost("aaa.bbb")