我正在学习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?
答案 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))