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

PHP cURL 通用封裝:支持 GET/POST、超時、Cookie 管理

     編輯:PHP 相關知識

功能特性

  • 統一入口函數 getHttpContent() 支持 GET/POST
  • 自動構建查詢字符串,支持數組參數
  • 可配置超時、跟隨重定向、Cookie 文件
  • 異常捕獲,失敗返回 null

完整代碼

<?php
/**
 * 通用 HTTP 請求函數
 * @param string $url      請求地址
 * @param string $method   'GET' 或 'POST'
 * @param array  $postData POST 數據鍵值對
 * @return string|false    響應體或 false
 */
function getHttpContent($url, $method = 'GET', $postData = []) {
    if (empty($url)) return false;

    $ch = curl_init();
    curl_setopt_array($ch, [
        CURLOPT_URL            => $url,
        CURLOPT_HEADER         => false,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT        => 30,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_ENCODING       => 'gzip,deflate', // 支持壓縮
        CURLOPT_SSL_VERIFYPEER => false,          // 開發環境跳過驗證
        CURLOPT_SSL_VERIFYHOST => false,
    ]);

    if (strtoupper($method) === 'POST') {
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData));
    }

    $data = curl_exec($ch);
    $errno = curl_errno($ch);
    $error = curl_error($ch);
    curl_close($ch);

    if ($errno) {
        error_log("cURL Error [$errno]: $error (URL: $url)");
        return false;
    }
    return $data;
}

// 使用示例
$html = getHttpContent('https://api.example.com/users', 'GET');
$result = getHttpContent('https://api.example.com/login', 'POST', [
    'username' => 'admin',
    'password' => 'secret'
]);
?>

進階擴展建議

  • Cookie 持久化:添加 CURLOPT_COOKIEJAR/CURLOPT_COOKIEFILE 參數實現會話保持。
  • 自定義 Header:通過 CURLOPT_HTTPHEADER 設置 Token、User-Agent 等。
  • 並發請求:使用 curl_multi_* 系列函數實現並發。
  • 重試機制:封裝指數退避重試邏輯,提高可用性。
  • PSR-7 兼容:返回 Psr\Http\Message\ResponseInterface 便於框架集成。

常見錯誤排查

現象可能原因解決
返回 false域名解析失敗/連接超時檢查 DNS、防火牆、超時設置
空白響應HTTPS 證書驗證失敗設置 CURLOPT_SSL_VERIFYPEER => false 或配置 CA 憑證
亂碼編碼不匹配檢查 CURLOPT_ENCODING 及響應 Content-Type charset
403 Forbidden反爬蟲/缺少 Header模擬瀏覽器 UA、Referer、Cookie
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved