我试图使用resp, err := http.Get(url)
命令将响应写入文件以及使用相同的响应来提取链接。如何在Golang中制作http.Get(url)请求的响应的副本
在我使用resp.Write(f)
将内容写入文件之后,我不能使用resp.Body
作为其他目的(对于来自上述url的响应)而不发出另一个http.Get
请求。我试过resp2 := bytes.NewBuffer(resp)
。它提供了类型不匹配的错误。我也尝试过复制。
我试图使用resp, err := http.Get(url)
命令将响应写入文件以及使用相同的响应来提取链接。如何在Golang中制作http.Get(url)请求的响应的副本
在我使用resp.Write(f)
将内容写入文件之后,我不能使用resp.Body
作为其他目的(对于来自上述url的响应)而不发出另一个http.Get
请求。我试过resp2 := bytes.NewBuffer(resp)
。它提供了类型不匹配的错误。我也尝试过复制。
假设响应放进内存里,只需要创建一个缓冲区,并使用resp.Write,像(未经测试,基本上是正确的):
var b bytes.Buffer
if err := resp.Write(b); err != nil {
// handle error
} else {
// Do something with buffer
}
代码与任何读者,使用的作品:ioutil.ReadAll,它返回一个新的[]字节包含数据,然后您可以包装在一个字节中。缓冲区
httputil有一个响应转储。 https://golang.org/pkg/net/http/httputil/#DumpRequest 它将使用内存副本替换主体,以便您可以重新使用它。
你能分享代码吗? –
一旦你已经排空它,你就无法读取响应主体。您是否尝试过在缓存的响应中使用[ReadResponse](https://golang.org/pkg/net/http/#ReadResponse)? – JimB
[code here](https://play.golang.org/p/Aj8KKfQGfD)在'resp.write(f)'产生带有标题信息且没有主体的新文件。顺便说一句,感谢@JimB在先前的问题。你能否提供ReadResponse示例。 –