我正在构建一个拦截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