错误:EOF用于读取Post请求的XML主体

时间:2014-10-11 14:25:54

标签: go

当我读取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没有按预期工作。

有没有理由抛出这个错误?

1 个答案:

答案 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两次,它会起作用。