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