当我读取XML响应主体时,我在控制台上获得error: EOF
。
以下是我的代码。
resp, err := http.Post(url, "application/xml", payload)
if err != nil {
response.WriteErrorString(http.StatusInternalServerError, err.Error())
return
}
defer resp.Body.Close()
dec := xml.NewDecoder(resp.Body)
if debug == true {
body, err := ioutil.ReadAll(resp.Body)
fmt.Println("=========== Response ==================")
if err != nil {
fmt.Printf("error: %v", err)
return
}
fmt.Println(string(body))
fmt.Println("=========== Response Ends =============")
}
err = dec.Decode(respStruct)
我怀疑ioutil.ReadAll
没有按预期工作。
有没有理由抛出这个错误?
答案 0 :(得分:3)
xml.NewDecoder(resp.Body)
可能已经阅读了resp.Body的内容
因此EOF
消息。
您可以在“xml.NewDecoder(resp.Body).Decode
Giving EOF
Error”
首先阅读resp.Body
,并使用xml.Unmarshal
字符串将避免双重读取和错误消息。
注意:similar answer表示从流中读取时,最佳做法仍然是使用xml.Decoder
而不是xml.Unmarshal
。
因此,请确保您没有阅读resp.Body
两次,它会起作用。