Avatar ·

Comment obtenir les en-têtes de réponse HTTP et le corps de la réponse dans une seule requête avec cURL en PHP ?

Bonjour à tous ! J'écris un parser en PHP utilisant cURL. J'ai besoin d'obtenir non seulement le contenu de la page (le corps de la réponse), mais aussi les en-têtes HTTP (par exemple, Content-Type, Status Code, Location lors des redirections).

Le problème est que lorsque j'utilise curl_exec(), je reçois uniquement le corps de la réponse. Si j'active l'option CURLOPT_HEADER => true, le résultat affiche tout ensemble — les en-têtes et le corps — et je dois les séparer manuellement avec explode(), ce qui est très peu pratique.

Voici mon code actuel :

$ch = curl_init('https://example.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
$response = curl_exec($ch);
curl_close($ch);

// Je dois séparer de manière bancale
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);
$body = substr($response, $header_size);

Cette méthode fonctionne, mais elle me semble sale. De plus,