Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah Saya Boleh Mendapatkan Kedua-dua Pengepala Respons dan Badan dengan Cekap dalam Permintaan cURL PHP Tunggal?

Bagaimanakah Saya Boleh Mendapatkan Kedua-dua Pengepala Respons dan Badan dengan Cekap dalam Permintaan cURL PHP Tunggal?

DDD
DDDasal
2024-12-16 07:36:13384semak imbas

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

Mendapatkan Pengepala Respons dan Badan dalam Permintaan cURL PHP Tunggal

Pustaka cURL PHP menyediakan keupayaan untuk melaksanakan permintaan HTTP, menjadikannya serba boleh untuk pengambilan data dan tugas komunikasi. Walau bagaimanapun, cabaran biasa yang dihadapi apabila menggunakan cURL ialah keperluan untuk mendapatkan kedua-dua pengepala respons dan kandungan dalam satu permintaan.

Secara lalai, menetapkan CURLOPT_HEADER kepada benar mengembalikan kedua-dua pengepala dan badan digabungkan dalam respons, yang memerlukan lebih lanjut menghurai untuk mengekstrak komponen individu. Untuk pendekatan yang lebih cekap dan selamat, kaedah alternatif boleh digunakan:

$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);

Kaedah ini memisahkan pengepala daripada badan menggunakan maklumat CURLINFO_HEADER_SIZE. Ambil perhatian bahawa pendekatan ini mungkin mempunyai had apabila berurusan dengan pelayan proksi atau jenis ubah hala tertentu. Pertimbangkan untuk menggunakan penyelesaian berikut untuk meningkatkan kebolehpercayaan dalam kes sedemikian:

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
    );
}

Penyelesaian ini memberikan kawalan yang lebih besar ke atas proses mendapatkan pengepala, memastikan hasil yang lebih dipercayai.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Kedua-dua Pengepala Respons dan Badan dengan Cekap dalam Permintaan cURL PHP Tunggal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn