diff --git a/.gitignore b/.gitignore index 1b808a0..3ae0f0e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,19 @@ +# Folders to ignore /src /bin /pkg /gowebdav -.idea/ -*.exe \ No newline at end of file +/.idea + +# Binaries for programs and plugins +*.exe +*.exe~ +*.dll +*.so +*.dylib + +# Test binary, build with `go test -c` +*.test + +# Output of the go coverage tool, specifically when used with LiteIDE +*.out diff --git a/requests.go b/requests.go index 35fe5f5..bd42ed3 100644 --- a/requests.go +++ b/requests.go @@ -12,10 +12,16 @@ import ( func (c *Client) req(method, path string, body io.Reader, intercept func(*http.Request)) (req *http.Response, err error) { // Tee the body, because if authorization fails we will need to read from it again. + var r *http.Request var ba bytes.Buffer bb := io.TeeReader(body, &ba) - r, err := http.NewRequest(method, PathEscape(Join(c.root, path)), &ba) + if body == nil { + r, err = http.NewRequest(method, PathEscape(Join(c.root, path)), nil) + } else { + r, err = http.NewRequest(method, PathEscape(Join(c.root, path)), bb) + } + if err != nil { return nil, err } @@ -42,7 +48,13 @@ func (c *Client) req(method, path string, body io.Reader, intercept func(*http.R } else { return rs, newPathError("Authorize", c.root, rs.StatusCode) } - return c.req(method, path, bb, intercept) + + if body == nil { + return c.req(method, path, nil, intercept) + } else { + return c.req(method, path, &ba, intercept) + } + } else if rs.StatusCode == 401 { return rs, newPathError("Authorize", c.root, rs.StatusCode) }