如何在 golang 中缓存 http.Response?

req, err := http.NewRequest("GET", "http://example.com", nil)

req.AddCookie(&http.Cookie{Name: "c", Value: "ccc"})

resp, err := client.Do(req)

我需要在磁盘上缓存响应,并在从缓存恢复后将其类型保持为 http.Response。有任何想法吗?


慕工程0101907
浏览 368回答 2
2回答

慕妹3242003

最简单的方法是使用httputil.DumpResponse和http.ReadResponse。有关示例,请参见此处。(您必须将代码复制到本地机器上并在那里运行,因为 Playground 不允许 I/O)第一个将您收到的请求转储,也可以选择将正文转储到内存中的 [] 字节,然后您可以将其写入磁盘。稍后您可以从磁盘(或您存储它的任何位置)读取响应并将其包装在 bufio.Reader 中,然后将其传递给 http.ReadResponse。ReadResponse 将 *http.Request 作为第二个参数,用作响应的 Request 字段的值。如果给出 nil,则返回的 Response 将在其 Request 字段中包含 GET 请求。

心有法竹

...或使用https://github.com/lox/httpcache。一个符合 RFC7234 的 golang http.Handler,用于缓存 HTTP 响应
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go