透過curl 命令列工具從遠端伺服器擷取資料時,您可能會遇到錯誤訊息「curl 錯誤18 - 傳輸已關閉,剩餘未完成的讀取資料。」此錯誤表示從URL 檢索資料的嘗試在收到整個回應之前中斷,導致資料部分或遺失。
通常,當 CURLOPT_RETURNTRANSFER 設定為 true 時會遇到此錯誤,表示curl_exec 函數應該傳回從 URL 檢索到的資料。但是,透過將 CURLOPT_RETURNTRANSFER 設為 false 來停用它,可以直接顯示檢索到的數據,從而避免錯誤。
導致錯誤的原因是什麼?
發生此錯誤的原因在 HTTP 回應中使用分塊編碼。分塊編碼允許伺服器以多個區塊的形式發送數據,每個區塊都以定義的字元序列終止。
在接收到所有區塊之前關閉連線時,libcurl 會辨識出最後接收到的區塊不完整,並且產生錯誤訊息。
解決問題
解決此問題有兩種主要方法:
1。停用分塊編碼:
您可以嘗試透過向curl 指令新增-0 選項來發出HTTP 1.0 請求。 HTTP 1.0 不使用分塊編碼,因此此解決方法可能會解決該錯誤。
2.檢查伺服器和網路設定:
此錯誤可能表示伺服器或網路連線出現問題。建議檢查以下內容:
以上是為什麼我收到'curl 錯誤 18 - 傳輸已關閉,剩餘未完成的讀取資料”以及如何修復它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!