Heim > Backend-Entwicklung > PHP-Tutorial > Wie kann ich sowohl Antwortheader als auch -text effizient in einer einzigen PHP-cURL-Anfrage abrufen?

Wie kann ich sowohl Antwortheader als auch -text effizient in einer einzigen PHP-cURL-Anfrage abrufen?

DDD
Freigeben: 2024-12-16 07:36:13
Original
381 Leute haben es durchsucht

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

Antwortheader und -text in einer einzigen PHP-cURL-Anfrage abrufen

Die cURL-Bibliothek von PHP bietet die Möglichkeit, HTTP-Anfragen auszuführen, was sie vielseitig einsetzbar macht Datenabruf- und Kommunikationsaufgaben. Eine häufige Herausforderung bei der Verwendung von cURL ist jedoch die Notwendigkeit, sowohl Antwortheader als auch -text in einer einzigen Anfrage abzurufen.

Standardmäßig werden bei der Einstellung von CURLOPT_HEADER auf „true“ sowohl Header als auch Text in der Antwort kombiniert zurückgegeben, was weitere Schritte erfordert Parsing, um die einzelnen Komponenten zu extrahieren. Für einen effizienteren und sichereren Ansatz kann eine alternative Methode verwendet werden:

$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);
Nach dem Login kopieren

Diese Methode trennt Header mithilfe der CURLINFO_HEADER_SIZE-Informationen vom Text. Beachten Sie, dass dieser Ansatz beim Umgang mit Proxyservern oder bestimmten Arten von Weiterleitungen möglicherweise Einschränkungen aufweist. Erwägen Sie in solchen Fällen die Verwendung der folgenden Lösung, um die Zuverlässigkeit zu erhöhen:

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
    );
}
Nach dem Login kopieren

Diese Lösung bietet eine bessere Kontrolle über den Header-Abrufprozess und sorgt so für zuverlässigere Ergebnisse.

Das obige ist der detaillierte Inhalt vonWie kann ich sowohl Antwortheader als auch -text effizient in einer einzigen PHP-cURL-Anfrage abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage