如何在Golang中制作http.Get(url)请求的响应副本

时间:2016-01-26 13:36:37

标签: go net-http

我正在尝试使用fstream命令将响应写入文件,并使用相同的响应来提取链接。

使用fstream f("myfile.txt",std::fstream::in | std::fstream::out); f.seekg(-1,is.f.end); // move the the end char c; f.get(c); if (c=='\n') ... else ... 将内容写入文件后,我无法将resp, err := http.Get(url)用于其他目的(针对上述网址的响应),而无需再发出resp.Write(f)次请求。

我试过了resp.Body。它给出了类型不匹配的错误。我也尝试过复制。

2 个答案:

答案 0 :(得分:4)

假设响应适合内存,只需创建一个缓冲区并使用resp.Write,如(未经测试,基本上正确):

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

对于适用于任何阅读器的代码,请使用:ioutil.ReadAll,它返回一个新的[]字节,其中包含您可以在bytes.Buffer中包装的数据

答案 1 :(得分:2)

httputil有一个响应转储。 https://golang.org/pkg/net/http/httputil/#DumpRequest 它将使用内存中的副本替换正文,以便您可以重复使用它。