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

PHP cURL 簡易抓取遠端網頁完整範例

     編輯:PHP 相關知識

cURL 是 PHP 最強大的 HTTP 客戶端庫,支援 HTTPS、POST、Header 自訂、Cookie、Proxy、憑證驗證等企業級功能。基本抓取僅需 4 行核心程式碼。

最小可行程式碼

<?php
$ch = curl_init('https://www.example.com/robots.txt');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$content = curl_exec($ch);
curl_close($ch);

echo $content;
?>

常用選項速查表

選項用途常用值
CURLOPT_URL目標網址字串
CURLOPT_RETURNTRANSFER回傳字串而非直接輸出true
CURLOPT_POST啟用 POSTtrue
CURLOPT_POSTFIELDSPOST 資料陣列或字串
CURLOPT_HTTPHEADER自訂 Header['Authorization: Bearer xxx']
CURLOPT_TIMEOUT總逾時秒數10
CURLOPT_CONNECTTIMEOUT連線逾時秒數5
CURLOPT_FOLLOWLOCATION追蹤重導向true
CURLOPT_SSL_VERIFYPEER驗證 SSL 憑證false (開發) / true (生產)
CURLOPT_COOKIEJAR/FILECookie 持久化檔案路徑
CURLOPT_PROXYProxy 伺服器'host:port'

進階範例:POST JSON + 自訂 Header + 錯誤處理

<?php
function httpPostJson(string $url, array $data, int $timeout = 10): ?array {
    $ch = curl_init($url);
    $payload = json_encode($data);
    curl_setopt_array($ch, [
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => $payload,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            'Content-Type: application/json',
            'Content-Length: ' . strlen($payload),
            'Accept: application/json',
        ],
        CURLOPT_TIMEOUT => $timeout,
        CURLOPT_CONNECTTIMEOUT => 5,
        CURLOPT_SSL_VERIFYPEER => true,
    ]);
    $response = curl_exec($ch);
    $errno = curl_errno($ch);
    $error = curl_error($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    if ($errno) {
        error_log("cURL 錯誤 [$errno]: $error");
        return null;
    }
    if ($httpCode < 200 || $httpCode >= 300) {
        error_log("HTTP $httpCode: $response");
        return null;
    }
    return json_decode($response, true);
}

// 使用
$result = httpPostJson('https://api.example.com/endpoint', ['key' => 'value']);
?>

錯誤處理最佳實務

  • 檢查 curl_errno() 非零即為 cURL 層面錯誤(DNS、連線、憑證等)。
  • 檢查 curl_getinfo($ch, CURLINFO_HTTP_CODE) 判斷 HTTP 狀態碼。
  • 生產環境必須啟用 CURLOPT_SSL_VERIFYPEER => true 並配置 CURLOPT_CAINFO 指向 CA 憑證包。
  • 長連線重用:單例模式保持 $ch 或使用 CurlHandle (PHP 8.0+)。

cURL 是 PHP 後端整合第三方 API、爬蟲、微服務呼叫的基石工具。

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