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

PHP cURL 重試機制實作:指定關鍵字驗證回應內容

     編輯:PHP 綜合知識

應用場景

呼叫外部 API 時,網路抖動或服務暫時不可用導致回應異常。需實作「重試 N 次,間隔 M 秒,直到回應包含預期關鍵字」的彈性機制。

函數實作

/**
 * 帶重試功能的 cURL GET 請求
 * @param string $url      請求網址
 * @param string $target   回應必須包含的關鍵字
 * @param int    $retry    重試次數 (預設 3)
 * @param int    $sleep    重試間隔秒數 (預設 1)
 * @return mixed|bool      成功回傳回應內容,失敗回傳 false
 */
function curlGetRetry($url, $target, $retry = 3, $sleep = 1) {
    $ch = curl_init();
    curl_setopt_array($ch, [
        CURLOPT_URL            => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_CONNECTTIMEOUT => 5,
        CURLOPT_TIMEOUT        => 5,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_SSL_VERIFYHOST => 1,
    ]);

    $output = curl_exec($ch);
    while (($retry-- > 0) && (strpos($output, $target) === false)) {
        sleep($sleep);
        $output = curl_exec($ch);
    }
    curl_close($ch);
    return $output;
}

使用範例

$response = curlGetRetry('https://api.example.com/status', '"status":"ok"', 5, 2);
if ($response === false || strpos($response, '"status":"ok"') === false) {
    // 記錄失敗日誌、發送告警...
}

擴充建議

  • 支援 POST、自定 Header、JSON Body。
  • 引入指數退避:$sleep *= 2。
  • 整合 PSR-3 Logger 記錄每次重試詳情。
  • 針對特定 HTTP 狀態碼(5xx、429)才重試,4xx 直接失敗。

總結

以 strpos 檢查關鍵字作為成功條件,配合簡單迴圈與 sleep,即可快速賦予 cURL 請求基本的重試韌性,適合非關鍵路徑的外部 API 呼叫。

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