2016-01-26 31 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,它返回一個新的[]字節包含數據,然後您可以包裝在一個字節中。緩衝區