13
req, err := http.NewRequest("GET", "http://example.com", nil)
req.AddCookie(&http.Cookie{Name: "c", Value: "ccc"})
resp, err := client.Do(req)

I need to cache resp on disk and keep its type as http.Response after restoring from cache. Any ideas?

4
  • 1
    Did you try some programming here? Or do you expect to find some package with magical func DumpResponse(filename string) error and func Loadesponse(filename string) (*http.Response, error)? Commented Oct 1, 2015 at 9:16
  • @Volker I'm asking for ideas, not ready made package. Commented Oct 1, 2015 at 9:25
  • convert resp to a byte array and write to a file. stackoverflow.com/questions/26372227/… Commented Oct 1, 2015 at 9:27
  • Don't forget the headers. Commented Oct 1, 2015 at 9:37

2 Answers 2

21

The easiest way is to use httputil.DumpResponse and http.ReadResponse.

See here for an example. (You have to copy the code onto your local machine and run it there, because the Playground doesn't allow I/O)

The first dumps your request as-received, optionally also dumping the body, to an in-memory []byte that you can then write to disk. Later you can read the response back from disk (or where ever you stored it) and wrap it in an bufio.Reader, which you pass to http.ReadResponse.

ReadResponse takes a *http.Request as second parameter that is used as the value for the Request field of the response. If nil is given, the returned Response will have GET request in it's Request field.

Sign up to request clarification or add additional context in comments.

1 Comment

Works great! Thank you!
8

... Or use https://github.com/lox/httpcache. An RFC7234 compliant golang http.Handler for caching HTTP responses

2 Comments

Unchanged since 2017 and archived since 2021. "This repository has been archived by the owner on Apr 18, 2021. It is now read-only."
github.com/victorspringer/http-cache could be another solution which is not archived as of early 2024

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.