首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP cURL 常見錯誤排查:SSL 驗證失敗與 HTTP 100 Continue 問題解決方案

     編輯:PHP 綜合知識

問題一:cURL 呼叫 HTTPS 出現 SSL 錯誤

現象

PHP 使用 cURL 請求 HTTPS 介面時失敗,但命令列下直接執行 curl 指令卻正常。

原因

伺服器所在機房網路環境無法驗證目標伺服器的 SSL 憑證(如缺少 CA 憑證束、自簽憑證等)。

解決方法

在開發/測試環境中,可選擇跳過 SSL 憑證驗證(生產環境慎用):

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

生產環境建議正確配置 CURLOPT_CAINFO 指向有效的 CA 憑證檔案(如 cacert.pem)。

問題二:curl_exec 回傳 bool(false),錯誤訊息為 "Empty reply from server"

排查過程

  1. 使用 var_dump(curl_error($ch)) 獲取錯誤:「Empty reply from server」。
  2. 開啟 Header 輸出觀察原始回應:
    curl_setopt($ch, CURLOPT_HEADER, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
  3. 發現回應包含 HTTP/1.1 100 Continue 後隨即斷開連線,未收到預期的 200 OK。

根本原因

cURL 預設發送 Expect: 100-continue 標頭,告知伺服器「我要傳送大量資料,請先確認」。Apache 收到後回應 100 Continue,但 PHP 的 cURL 處理邏輯在收到 100 狀態碼後誤判為流程結束,未繼續接收後續的 200 回應。

解決方案

發送空的 Expect: 標頭覆蓋預設行為:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));

延伸閱讀

此問題最早由開發者於 2006 年發現並記錄於部落格 PHP and cURL: Disabling 100-continue header,至今仍是 cURL 對接特定伺服器(如 Nginx、Apache 特定配置)時的經典坑點。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved