Maison >développement back-end >tutoriel php >Comment puis-je récupérer efficacement les en-têtes et le corps de la réponse dans une seule requête PHP cURL ?
Récupération des en-têtes et du corps de réponse dans une seule requête cURL PHP
La bibliothèque cURL de PHP offre la possibilité d'effectuer des requêtes HTTP, ce qui la rend polyvalente pour tâches de récupération de données et de communication. Cependant, un défi courant rencontré lors de l'utilisation de cURL est la nécessité de récupérer à la fois les en-têtes et le corps de la réponse en une seule requête.
Par défaut, définir CURLOPT_HEADER sur true renvoie les en-têtes et le corps combinés dans la réponse, ce qui nécessite davantage analyse pour extraire les composants individuels. Pour une approche plus efficace et sécurisée, une méthode alternative peut être utilisée :
$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);
Cette méthode sépare les en-têtes du corps à l'aide des informations CURLINFO_HEADER_SIZE. Notez que cette approche peut avoir des limites lorsqu'il s'agit de serveurs proxy ou de certains types de redirections. Envisagez d'utiliser la solution suivante pour une fiabilité accrue dans de tels cas :
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 ); }
Cette solution offre un meilleur contrôle sur le processus de récupération d'en-tête, garantissant des résultats plus fiables.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!