如何在golang中缓存http.Response?

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

我需要将resp缓存到磁盘上,并在从缓存中恢复后保持其类型为http.Response。有什么想法吗?


1
你在这里尝试编程了吗?或者你希望找到一些神奇的包,其中包括func DumpResponse(filename string) errorfunc Loadesponse(filename string) (*http.Response, error)函数吗? - Volker
@Volker,我在寻求想法,而不是现成的软件包。 - nanolab
resp转换为byte数组并写入文件。https://dev59.com/E4Tba4cB1Zd3GeqP30cU - Aruna Herath
不要忘记头文件。 - Volker
2个回答

20
最简单的方法是使用httputil.DumpResponsehttp.ReadResponse这里有一个例子。(你需要将代码复制到本地并在本地运行,因为Playground不允许I/O)
第一个方法会将您收到的请求转储到内存中的[]byte中,可选择性地转储正文,然后您可以将其写入磁盘。稍后,您可以从磁盘(或任何其他位置)读取响应,并将其包装在bufio.Reader中,然后将其传递给http.ReadResponse。
ReadResponse接受*http.Request作为第二个参数,该参数用作响应的Request字段的值。如果给定nil,则返回的Response将在其Request字段中具有GET请求。

非常好!谢谢你! - nanolab

8

1
自2017年以来未更改,并于2021年归档。 "此存储库已于2021年4月18日被所有者归档。现在只能进行阅读,无法进行更改。" - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接