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

PHP cURL 訪問 HTTPS 網站完整配置:跳過證書驗證、設定 User-Agent、獲取狀態碼

     編輯:PHP 相關知識

PHP cURL 訪問 HTTPS 網站完整配置:跳過證書驗證、設定 User-Agent、獲取狀態碼

cURL 訪問 HTTPS 預設會驗證 SSL 證書,開發/測試環境常因自簽證書導致失敗。本文提供最小可用配置,並說明生產環境的安全配置差異。

最小可用配置(開發/測試)

$url = 'https://www.google.com.hk';
$ch = curl_init();

curl_setopt_array($ch, [
    CURLOPT_URL            => $url,
    CURLOPT_HEADER         => false,      // 不返回 Header
    CURLOPT_RETURNTRANSFER => true,       // 返回字串
    CURLOPT_SSL_VERIFYPEER => false,      // ⚠️ 跳過證書驗證
    CURLOPT_SSL_VERIFYHOST => false,      // ⚠️ 跳過主機名驗證
    CURLOPT_USERAGENT      => 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.1 Safari/537.11',
    CURLOPT_TIMEOUT        => 15,
    CURLOPT_FOLLOWLOCATION => true,       // 支援重導向
    CURLOPT_MAXREDIRS      => 5,
]);

$res = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

echo "HTTP $httpCode\n";
echo $res;

關鍵選項對照

選項值說明
CURLOPT_SSL_VERIFYPEERfalse不驗證伺服器證書真偽(開發用)
CURLOPT_SSL_VERIFYHOSTfalse不驗證證書 CN/SAN 與域名匹配(開發用)
CURLOPT_USERAGENT自定字串模擬瀏覽器,防反爬蟲攔截
CURLINFO_HTTP_CODE獲取狀態碼200/301/404/500 等

生產環境安全配置(必須)

// 1. 使用系統 CA 憑證庫(Linux 通常內建)
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 2 = 檢查 CN/SAN 匹配
curl_setopt($ch, CURLOPT_CAINFO, '/etc/ssl/certs/ca-certificates.crt'); // 指定 CA 憑證路徑

// 2. 或使用 cacert.pem(跨平台通用)
// 下載:https://curl.se/ca/cacert.pem
curl_setopt($ch, CURLOPT_CAINFO, __DIR__ . '/cacert.pem');

進階:雙向 TLS(mTLS)客戶端證書

curl_setopt($ch, CURLOPT_SSLCERT, '/path/to/client.pem'); // 客戶端證書
curl_setopt($ch, CURLOPT_SSLKEY,  '/path/to/client.key'); // 私鑰
curl_setopt($ch, CURLOPT_KEYPASSWD, 'keypassword');       // 私鑰密碼(如有)

常見錯誤排查

  • CURLE_SSL_CACERT (60):CA 憑證路徑錯誤或缺失 → 設定 CURLOPT_CAINFO。
  • CURLE_SSL_CONNECT_ERROR (35):TLS 版本不支援 → 嘗試 CURLOPT_SSLVERSION => CURL_SSLVERSION_TLSv1_2。
  • CURLE_PEER_FAILED_VERIFICATION (51):證書過期/自簽/域名不符 → 生產環境必須修正證書,不可長期關閉驗證。

掌握 HTTPS cURL 配置是 PHP 後端串接第三方 API、微服務通訊、爬蟲開發的必備基本功。

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