首頁 >後端開發 >php教程 >如何在單一 PHP cURL 請求中高效檢索回應標頭和正文?

如何在單一 PHP cURL 請求中高效檢索回應標頭和正文?

DDD
DDD原創
2024-12-16 07:36:13384瀏覽

How Can I Efficiently Retrieve Both Response Headers and Body in a Single PHP cURL Request?

在單一PHP cURL 請求中檢索回應標頭和正文

PHP 的cURL 庫提供了執行HTTP 請求的能力,使其具有多種用途數據獲取和通信任務。然而,使用 cURL 時遇到的一個常見挑戰是需要在單一請求中檢索回應標頭和正文。

預設情況下,將 CURLOPT_HEADER 設為 true 會傳回回應中組合的標頭和正文,這需要進一步解析以提取各個元件。為了更有效和安全的方法,可以採用另一種方​​法:

$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);

// Execute the request
$response = curl_exec($ch);

// Extract header and body
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);
$body = substr($response, $header_size);

此方法使用 CURLINFO_HEADER_SIZE 資訊將標頭與正文分開。請注意,在處理代理伺服器或某些類型的重定向時,此方法可能有限制。在這種情況下,請考慮使用以下解決方案來提高可靠性:

function get_headers_body($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, true);
    curl_setopt($ch, CURLOPT_NOBODY, true);

    // Execute the request and get headers only
    $headers = curl_exec($ch);

    // Close the original handle
    curl_close($ch);

    // Set the necessary header information to a new handle
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));

    foreach (explode("\n", $headers) as $header) {
        // Remove set-cookie headers
        if (stripos($header, 'set-cookie') !== false) {
            continue;
        }
        // Add it to the request
        curl_setopt($ch, CURLOPT_HTTPHEADER, array($header));
    }

    // Execute the request and get the body only
    $body = curl_exec($ch);

    // Close the handle
    curl_close($ch);

    return array(
        'headers' => $headers,
        'body' => $body
    );
}

此解決方案可以更好地控制標頭檢索過程,確保結果更可靠。

以上是如何在單一 PHP cURL 請求中高效檢索回應標頭和正文?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn