2016-01-26 68 views
-1

我试图使用resp, err := http.Get(url)命令将响应写入文件以及使用相同的响应来提取链接。如何在Golang中制作http.Get(url)请求的响应的副本

在我使用resp.Write(f)将内容写入文件之后,我不能使用resp.Body作为其他目的(对于来自上述url的响应)而不发出另一个http.Get请求。我试过resp2 := bytes.NewBuffer(resp)。它提供了类型不匹配的错误。我也尝试过复制。

+0

你能分享代码吗? –

+0

一旦你已经排空它,你就无法读取响应主体。您是否尝试过在缓存的响应中使用[ReadResponse](https://golang.org/pkg/net/http/#ReadResponse)? – JimB

+0

[code here](https://play.golang.org/p/Aj8KKfQGfD)在'resp.write(f)'产生带有标题信息且没有主体的新文件。顺便说一句,感谢@JimB在先前的问题。你能否提供ReadResponse示例。 –

回答

4

假设响应放进内存里,只需要创建一个缓冲区,并使用resp.Write,像(未经测试,基本上是正确的):

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

代码与任何读者,使用的作品:ioutil.ReadAll,它返回一个新的[]字节包含数据,然后您可以包装在一个字节中。缓冲区