我正在构建一个简单的缓存代理,拦截HTTP请求,获取响应中的内容,然后将其写回客户端。问题在于,一旦我从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
中吗?
Write()
方法写入一个http.Response
对象(因为它无法转换为[]byte
)。但是,你可以使用名为w
的ResponseWriter
对象来进行Write()
操作。我已经仔细检查过了,你提出的方法行不通。 - jeffknupp