Go 错误:读取Post请求的XML正文的EOF
当我读取XML响应正文时,控制台上出现了Go 错误:读取Post请求的XML正文的EOF,go,Go,当我读取XML响应正文时,控制台上出现了错误: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.Bod
错误: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
没有按预期工作
抛出此错误有什么原因吗?可能已经阅读了resp.Body的内容。因此出现了
EOF
消息
您可以在“”中看到相同的错误
首先读取resp.Body
,并将字符串与一起使用可以避免重复读取和错误消息
注意:a表明在从流读取时,最佳做法仍然是使用xml.Decoder
而不是xml.Unmarshal
。因此,请确保不要阅读
resp.Body
两次,它就会起作用。那么新解码器如何?这似乎工作得很好,但问题是我如何将此方法的响应读入字符串表明您在正确的轨道上,但在读取resp.Body时需要小心。我以前的答案()是先读取字符串中的resp.Body,然后使用UnMarshal而不是NewDecoder。