Mengapa Adakah `xml.NewDecoder()` Melemparkan Ralat EOF Selepas Membaca Badan Respons HTTP?

Mary-Kate Olsen
Lepaskan: 2024-11-02 03:09:02
asal
948 orang telah melayarinya

Why Does `xml.NewDecoder()` Throw an EOF Error After Reading the HTTP Response Body?

Ralat Penyahkod XML dengan xml.NewDecoder() Selepas Membaca Kandungan Kandungan

Apabila cuba menyahkod XML daripada badan tindak balas HTTP, pembangun boleh menghadapi ralat EOF (akhir fail) dengan xml.NewDecoder(). Ralat ini lazimnya berlaku jika kandungan kandungan telah dibaca atau diproses.

Sampel kod yang disediakan termasuk bahagian di mana badan respons pertama kali dibaca menggunakan ioutil.ReadAll(). Tindakan ini menggunakan seluruh kandungan badan, menjadikannya tidak tersedia untuk operasi seterusnya. Akibatnya, apabila xml.NewDecoder() digunakan untuk membaca kandungan, ia sampai ke penghujung fail dan mencetuskan ralat EOF.

Untuk mengelakkan ralat ini, disyorkan untuk menyimpan kandungan badan respons ke dalam pembolehubah sebelum melakukan sebarang operasi baca. Ini membenarkan fungsi lain, seperti xml.NewDecoder(), untuk mengakses kandungan tanpa mencetuskan ralat EOF.

Sampel Kod Pengubahsuaian:

<code class="go">var bodyContent []byte

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

defer resp1.Body.Close()
bodyContent, err = ioutil.ReadAll(resp1.Body)
error_handler(err)
resp1.Body = ioutil.NopCloser(bytes.NewBuffer(bodyContent))

if err := xml.NewDecoder(resp1.Body).Decode(&v); err != nil {
    fmt.Printf("error is : %v", err)
    return
}</code>
Salin selepas log masuk

Dengan memperkenalkan pembolehubah bodyContent dan mengemas kini resp1.Body, kandungan boleh digunakan semula untuk kedua-dua tindakan. Pendekatan ini menghapuskan ralat EOF dan membolehkan penyahkodan XML yang berjaya.

Atas ialah kandungan terperinci Mengapa Adakah `xml.NewDecoder()` Melemparkan Ralat EOF Selepas Membaca Badan Respons HTTP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!