首頁 > 後端開發 > Golang > 為什麼在 `ioutil.ReadAll(resp1.Body)` 讀取回應正文後,`xml.NewDecoder(resp.Body).Decode` 回傳 \'EOF\' 錯誤?

為什麼在 `ioutil.ReadAll(resp1.Body)` 讀取回應正文後,`xml.NewDecoder(resp.Body).Decode` 回傳 \'EOF\' 錯誤?

Patricia Arquette
發布: 2024-10-29 15:57:02
原創
702 人瀏覽過

Why does `xml.NewDecoder(resp.Body).Decode` return an

xml.NewDecoder(resp.Body).Decode 中出現EOF 錯誤

問題:

問題:

問題:
<code class="go">req1, err := http.NewRequest("GET", concat([]string{domain, defects_link}), nil)
error_handler(err)
req1.Close = true 

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

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

defer resp1.Body.Close()
conts1, err := ioutil.ReadAll(resp1.Body)
error_handler(err)
fmt.Println("Response Body is Here :", string(conts1))//Contents are Printed Here

if err := xml.NewDecoder(resp1.Body).Decode(&v); err != nil {
    fmt.Printf("error is : %v", err)
    return
}</code>
登入後複製

問題:

問題:

問題:

<code class="go">bodyBuffer := bytes.NewReader(conts1)
decoder := xml.NewDecoder(bodyBuffer)
err := decoder.Decode(&v)
if err != nil {
    fmt.Printf("error is : %v", err)
}</code>
登入後複製
問題:

<code class="go">_, err = resp1.Body.Seek(0, 0)
if err != nil {
    fmt.Printf("error is : %v", err)
}

decoder := xml.NewDecoder(resp1.Body)
err = decoder.Decode(&v)
if err != nil {
    fmt.Printf("error is : %v", err)
}</code>
登入後複製
問題:問🎜 >嘗試使用xml.NewDecoder(resp.Body).Decode 從HTTP 回應中解碼XML 時,儘管已使用xml.Unmarshal 成功解碼回應正文,但仍會出現錯誤「EOF」。 Code :說明:發生錯誤「EOF」(檔案結束),因為回應正文已被ioutil 消耗前面幾行中的.ReadAll(resp1.Body)。此函數讀取正文中的所有數據,直到 EOF,不留下任何內容供 xml.NewDecoder 解碼。 解決方案:要解決此問題,正文內容應該在使用 xml.NewDecoder 解碼之前將其複製到新的 io.Reader 中。這允許多個閱讀器存取正文的內容。 一種方法是使用bytes.NewReader 從正文內容建立新的閱讀器:或者, resp1.Body 可以是使用resp1.Body.Seek(0, 0) 「回退」到其初始狀態:

以上是為什麼在 `ioutil.ReadAll(resp1.Body)` 讀取回應正文後,`xml.NewDecoder(resp.Body).Decode` 回傳 \'EOF\' 錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板