L.fole
L.fole

Reputation: 807

how to make a copy of response of http.Get(url) request in Golang

I'm trying to use resp, err := http.Get(url) command to write the response to file as well as use the same response to extract links.

After I write the content to a file using resp.Write(f), I cannot use resp.Body for another purpose (for the response from the above url) without making another http.Get request.

I tried resp2 := bytes.NewBuffer(resp). It gives eror as type does not match. I've tried copy as well.

Upvotes: 5

Views: 11665

Answers (2)

slcjordan
slcjordan

Reputation: 96

httputil has a response dump. https://golang.org/pkg/net/http/httputil/#DumpRequest It will replace the body with an in-memory copy so you can reuse it.

Upvotes: 3

David Budworth
David Budworth

Reputation: 11646

Assuming the response fits in memory, just create a buffer and use resp.Write, like (untested, basically correct):

var b bytes.Buffer
if err := resp.Write(b); err != nil {
   // handle error
} else {
    // Do something with buffer
}

for code that works with any reader, use: ioutil.ReadAll, which returns a new []byte containing the data that you can then wrap in a bytes.Buffer

Upvotes: 5

Related Questions