我正在構建一個攔截HTTP請求的簡單緩存代理,抓取response.Body中的內容,然後將其寫回客戶端。問題是,一旦我從response.Body中讀取,寫回到客戶端的內容就會包含一個空的主體(其他所有內容,如標題,都按預期寫入)。多次讀取一個閱讀器
下面是當前的代碼:
func requestHandler(w http.ResponseWriter, r *http.Request) {
client := &http.Client{}
r.RequestURI = ""
response, err := client.Do(r)
defer response.Body.Close()
if err != nil {
log.Fatal(err)
}
content, _ := ioutil.ReadAll(response.Body)
cachePage(response.Request.URL.String(), content)
response.Write(w)
}
如果我刪除content, _
和cachePage
線,它工作正常。隨着包含的行,請求返回和空主體。任何想法如何我可以得到只是的http.Response
的Body
,仍然寫出全部響應http.ResponseWriter
?
不應該在最後一行w.Write(響應)? – DanG 2014-09-19 15:35:33
你不能只寫'()''http.Response'對象(它不能轉換爲'[] byte')。你*可以*寫(')''ResponseWriter''命名'w'。我仔細檢查了這個工作,你的建議沒有。 – jknupp 2014-09-19 15:39:24
不理想,但你可以創建自己的結構實現io.ReadCloser把身體放回去,然後將它分配給response.Body? – DanG 2014-09-19 15:57:15