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

PHP cURL 初始化與執行入門級代碼模板:常用選項全覆蓋

     編輯:PHP 相關知識

PHP cURL 初始化與執行入門級代碼模板:常用選項全覆蓋

cURL 是 PHP 進行 HTTP 請求的核心工具。本文提供一份「複製即用」的初始化模板,覆蓋 URL 設置、返回值控制、Header 處理、Cookie 管理、POST 提交、超時控制、重定向跟隨、Referer、HTTP 版本、連接復用、HTTPS 支持、毫秒級超時等高頻場景,適合作為項目 HTTP 客戶端基礎封裝參考。

完整模板代碼

<?php
$ch = curl_init();

# 基礎 URL 與返回控制
curl_setopt($ch, CURLOPT_URL, 'https://www.baidu.com/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  // 返回字符串而非直接輸出
curl_setopt($ch, CURLOPT_HEADER, 1);          // 包含響應頭

# Cookie 文件持久化(登錄態維持)
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);  // 响應 Cookie 寫入文件
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); // 請求攜帶文件中 Cookie

# 自定義請求頭
curl_setopt($ch, CURLOPT_HTTPHEADER, array('User-Agent: Mozilla/5.0'));

# POST 請求
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $poststring); // 字符串或數組

# 超時控制
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); // 連接階段超時 (秒)
curl_setopt($ch, CURLOPT_TIMEOUT, 30);       // 整個請求超時 (秒)

# 重定向跟隨
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // 跟隨 301/302
curl_setopt($ch, CURLOPT_MAXREDIRS, 10);     // 最大重定向次數

# Referer
curl_setopt($ch, CURLOPT_REFERER, $refer);

# HTTP 版本與連接復用
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_FORBID_REUSE, 1); // 禁止連接復用(調試/特殊場景)

# HTTPS 支持(跳過證書驗證,僅測試用)
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);

# 毫秒級超時 (cURL 7.15.2+)
curl_setopt($ch, CURLOPT_NOSIGNAL, 1);      // 多線程環境避免信號衝突
// curl_setopt($ch, CURLOPT_TIMEOUT_MS, 3000); // 整體毫秒超時
// curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 500); // 連接毫秒超時

# 執行請求
$response = curl_exec($ch);

# 錯誤處理
if (curl_errno($ch)) {
    $error = curl_error($ch);
    // 記錄日誌、拋出異常...
    curl_close($ch);
    return false;
}

# 關閉句柄
curl_close($ch);

# 後續處理 $response...
// 若 CURLOPT_HEADER=1,需分離頭部與體
// list($header, $body) = explode("\r\n\r\n", $response, 2);

常用選項速查表

選項典型值說明
CURLOPT_URL字符串請求目標地址
CURLOPT_RETURNTRANSFER1/01=返回字符串,0=直接輸出
CURLOPT_POST1/0啟用 POST
CURLOPT_POSTFIELDS字符串/數組POST 數據,數組自動編碼為 multipart/form-data
CURLOPT_HTTPHEADER數組自定義請求頭,如 array('Content-Type: application/json', 'Authorization: Bearer xxx')
CURLOPT_COOKIEJAR/FILE文件路徑Cookie 持久化讀寫
CURLOPT_FOLLOWLOCATION1/0自動跟隨重定向
CURLOPT_SSL_VERIFYPEER0/1驗證 SSL 證書(生產必須 1)
CURLOPT_TIMEOUT整數最大執行秒數
CURLOPT_CONNECTTIMEOUT整數連接等待秒數
CURLOPT_PROXY字符串代理服務器 ip:port
CURLOPT_PROXYTYPE常量CURLPROXY_HTTP、CURLPROXY_SOCKS5

進階封裝建議

  • 封裝 HttpClient 類:構造函數初始化公共選項(UA、超時、SSL)、提供 get()/post()/request() 方法、統一異常處理、自動 JSON 編解碼、支持中間件(日誌、重試、熔斷)。
  • 或直接使用成熟庫:guzzlehttp/guzzle、symfony/http-client、php-http/client(PSR-18 標準)。
  • 並發請求:curl_multi_* 系列或 Guzzle\Promise 異步。

熟練掌握 cURL 選項組合,是 PHP 後端對接第三方 API、爬蟲、微服務通信的基本功。

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