我复制resp.Body吗?

时间:2016-01-21 05:14:49

标签: go

我正在学习go并且我有以下代码可以正常工作:

resp, err := http.Get(url)  // get the html
   ...
doc, err := html.Parse(resp.Body)  // parse the html page

现在我想首先打印出html然后进行解析:

resp, err := http.Get(url)
   ...
b, err := ioutil.ReadAll(resp.Body)  // this line is added, not working now...
doc, err := html.Parse(resp.Body)

我猜原因是resp.Body是读者,我不能两次打电话给读书?知道我怎么能正确地做到这一点?复制resp.Body?

1 个答案:

答案 0 :(得分:5)

因为客户端从网络流式传输响应主体,所以无法读取主体两次。

阅读您正在做的对[]byte的回复。使用bytes.NewReader在HTML解析器的字节上创建io.Reader

resp, err := http.Get(url)
...
b, err := ioutil.ReadAll(resp.Body)  
doc, err := html.Parse(bytes.NewReader(b))