首頁  >  文章  >  後端開發  >  嘗試讀取請求正文後出現“json 正文無法解碼:EOF”

嘗試讀取請求正文後出現“json 正文無法解碼:EOF”

PHPz
PHPz轉載
2024-02-09 10:20:19559瀏覽

尝试读取请求正文后出现“json 正文无法解码:EOF”

在PHP開發中,我們經常會遇到各種問題和錯誤。其中一個常見的問題是在嘗試讀取請求正文時出現「json 正文無法解碼:EOF」的錯誤。這個錯誤提示意味著在解碼JSON請求正文時遇到了意外的檔案結尾。通常情況下,這個問題可以透過一些簡單的調試和排查來解決。在本文中,我們將討論這個問題可能的原因,並提供一些解決方法來幫助您解決這個錯誤。

問題內容

我寫了一個記錄器中間件,用於儲存傳入的 graphql 請求資訊。問題是,如果我嘗試讀取請求正文,我會收到以下 400 bad request:

{
    "errors": [
        {
            "message": "json body could not be decoded: eof"
        }
    ],
    "data": null
}

我的程式碼:

clonedReq := r.Clone(ctx)
data, _ := io.ReadAll(clonedReq.Body)

// store the data...
fmt.Println(string(data))

數據已顯示,但隨後我遇到 eof 錯誤。如果我註解掉這部分,則請求將得到回應,沒有任何問題。

無論是否使用 clone 請求深層副本,問題仍然存在。

解決方法

中間件讀取請求體至eof。處理程序遇到 eof。 clone() 中不會克隆請求正文的內容。

要修正程式碼,請在中間件中恢復請求正文:

data, _ := io.ReadAll(r.Body)
  r.Body = io.NopCloser(bytes.NewReader(data))

以上是嘗試讀取請求正文後出現“json 正文無法解碼:EOF”的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除