【发布时间】:2017-01-17 14:37:33
【问题描述】:
(这里是新手) 我有一些这样的代码:
func (c *clientImpl) queryHost(qtype string, page int) (io.ReadCloser, error) {
queryURI := c.URL + "/api/query"
req, _ := http.NewRequest(http.MethodGet, queryURI, nil)
req.Header.Add(authHeaderName, authToken)
req.Header.Add("Accept", accept)
q := req.URL.Query()
q.Add("type", qtype)
q.Add("pageSize", pageSize)
q.Add("page", strconv.Itoa(page))
req.URL.RawQuery = q.Encode()
resp, err := c.client.Do(req) //*http.Client
if err != nil {
return nil, utils.NestedError("Error in querying Host", err)
}
return resp.Body, nil
}
然后这样调用:
body, err := c.queryHost(myQType, i)
if err != nil {
log.Printf("Error while trying to get page %v - %v \n", i, err)
return err
}
defer body.Close()
var qResult myQueryResult
err = xml.NewDecoder(body).Decode(&myQueryResult)
if err != nil {
log.Printf("Error while decoding page %v - %v \n", i, err)
return utils.NestedError("Error in decoding response body xml", err)
}
我想记录未能处理的原始 xml,但由于这是一个 ReadCloser,并且一旦读取,就无法再次读取(或者我错了吗?)。有什么办法可以得到这个,还是我必须将初始响应存储在某个地方并传递副本?
【问题讨论】: