一尘不染

如何在golang中缓存http.Response?

go

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。有任何想法吗?


阅读 331

收藏
2020-07-02

共1个答案

一尘不染

最简单的方法是使用httputil.DumpResponsehttp.ReadResponse

请参阅此处的示例。(您必须将代码复制到本地计算机上并在本地计算机上运行,​​因为Playground不允许I
/ O)

第一个将接收到的请求转储到内存中的[]字节中,然后可以将其写入磁盘,然后将其转储到正文中。稍后,您可以从磁盘(或存储它的位置)中读取响应,并将其包装在bufio.Reader中,并将其传递给http.ReadResponse。

ReadResponse将*
http.Request作为第二个参数,用作响应的Request字段的值。如果给出nil,则返回的Response将在其Request字段中具有GET请求。

2020-07-02