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

PHP cURL 封裝類:支援 GET/POST、Header、Cookie、HTTPS

     編輯:PHP 相關知識

通用 cURL 方法

<?php
class HttpClient {
    /**
     * 統一請求入口
     * @param string|array $url 字串或 ['https_url', ...] 觸發 SSL 設定
     * @param array|null $header 自訂 Header 陣列
     * @param array|null $post POST 欄位陣列
     * @param int $cookie 0=不處理 1=存 Cookie 2=送 Cookie
     * @return string|false 回應內容
     */
    public function request($url, $header = null, $post = null, $cookie = 0) {
        $isHttps = is_array($url);
        $target = $isHttps ? $url[0] : $url;

        $ch = curl_init($target);
        curl_setopt_array($ch, [
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_MAXREDIRS      => 5,
            CURLOPT_TIMEOUT        => 30,
            CURLOPT_SSL_VERIFYPEER => $isHttps ? false : true,
            CURLOPT_SSL_VERIFYHOST => $isHttps ? false : 2,
        ]);

        if ($header) curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
        if ($post) {
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
        }
        if ($cookie === 1) curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
        if ($cookie === 2) curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');

        $data = curl_exec($ch);
        if (curl_errno($ch)) {
            error_log('cURL Error: ' . curl_error($ch));
            $data = false;
        }
        curl_close($ch);
        return $data;
    }

    // 便利方法
    public function get($url, $header = null) { return $this->request($url, $header); }
    public function post($url, array $data, $header = null) { return $this->request($url, $header, $data); }
}

使用範例

$http = new HttpClient();

// 簡單 GET
$html = $http->get('https://api.example.com/users');

// POST 登入並保存 Cookie
$http->post('https://site.com/login', ['user'=>'a','pwd'=>'b'], null, 1);

// 攜帶 Cookie 訪問會員頁
$page = $http->request(['https://site.com/profile'], null, null, 2);

// 自訂 Header(如 API Token)
$header = ['Authorization: Bearer ' . $token, 'Accept: application/json'];
$json = $http->request('https://api.example.com/data', $header);

進階提示

  • 生產環境請啟用 CURLOPT_SSL_VERIFYPEER => true 並配置 CA 憑證。
  • 長連線可重複使用 $ch(單例模式)提升效能。
  • 錯誤處理建議拋出例外而非回傳 false。
  • 大檔案下載改用 CURLOPT_WRITEFUNCTION 串流寫入磁碟。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved