xml.NewDecoder(resp.Body).Decode给予EOF错误_GOLang

时间:2014-07-22 05:29:51

标签: html xml go

我正在尝试从主体解码XML回复。

=>我将此响应正文作为字符串保存到变量并成功解码使用xml.Unmarshal函数.Code:

    err = xml.Unmarshal([]byte(outs), &v)
       if err != nil {
    fmt.Printf("error is here: %v", err)
    return
                       }

所以我认为问题不在于实际的响应内容。

现在我的实际代码:

req1, err := http.NewRequest("GET", concat([]string{domain, defects_link}), nil)
error_handler(err)
req1.Close = true //I tried with and without this line 

resp1, err := client.Do(req1)
error_handler(err)

fmt.Printf("\n %s \n", resp1.Status)

defer resp1.Body.Close()//I tried with and without this line
conts1, err := ioutil.ReadAll(resp1.Body)
error_handler(err)
fmt.Println("Response Body is Here :", string(conts1))//Contents are Printed Here

响应打印在上面代码的最后一行。但是下面的代码给出了“错误:EOF”

    if err := xml.NewDecoder(resp1.Body).Decode(&v); err != nil {
    fmt.Printf("error is : %v", err)

    return
}

我的代码有什么问题。亲切帮助

1 个答案:

答案 0 :(得分:3)

如果您已经阅读Body io.ReadCloser一次(使用conts1, err := ioutil.ReadAll(resp1.Body)),则无法让其他函数再次阅读(或者您将收到EOF错误消息)。

  

我将此响应正文保存为变量的字符串并使用xml.Unmarshal函数成功解码。

这似乎是多次使用身体内容的最简单方法。