416 votes

PHP cURL récupérant les en-têtes de réponse ET le corps dans une seule requête?

Est-il possible d’obtenir les en-têtes et corps pour une demande de cURL en utilisant PHP ? J’ai trouvé que cette option :

va retourner le corps plus les en-têtes, mais ensuite j’ai besoin d’analyser pour obtenir le corps. Est-il possible d’obtenir tous les deux d’une manière plus utilisable (et sûre) ?

EDIT: « demande unique », je veux dire avoind délivrant une tête avant la demande de GET/POST.

574voto

iblue Points 10472

Oui. Pour plus de détails, s’il vous plaît jeter un oeil à ce post dans la documentation de PHP : http://www.php.net/manual/en/function.curl-exec.php#80442

Exemple de code :

149voto

Skacc Points 75

Curl a intégré en option pour celle-ci, appelée CURLOPT_HEADERFUNCTION. La valeur de cette option est le nom d'une fonction de rappel. Curl passer l'en-tête (et la tête de seulement!) à ce rappel à l'functionm ligne par ligne. Votre fonction de rappel peut faire quelque chose avec elle, et retourne le nombre d'octets de la ligne. Voici testé code du travail:

function HandleHeaderLine( $curl, $header_line ) {
    echo "<br>YEAH: ".$header_line; // or do whatever
    return strlen($header_line);
}


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.google.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADERFUNCTION, "HandleHeaderLine");
$body = curl_exec($ch); 

Les travaux ci-dessus avec everthing, les différents protocoles, et vous n'avez pas besoin de vous soucier de la taille d'en-tête, ou un ensemble de lots de différentes options.

38voto

user1031143 Points 491

est ce que vous cherchez?

 curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
$response = curl_exec($ch); 
list($header, $body) = explode("\r\n\r\n", $response, 2);
 

5voto

user209737 Points 69
<pre><code></code><p>Dans 99 % des cas d’utilisation ce code fonctionne correctement, mais lorsque vôtre connexion se passe via le proxy, les résultats peuvent être inattendus, car le proxy peut modifier ou ajouter des en-têtes à votre réponse sans taille de l’entête modifing  :/</p><p>Si vous devez trouver quelque chose de « spécial » de votre réponse essayez utiliser preg_match() il est plus sûr</p></pre>

2voto

Enyby Points 344
<pre><code></code><p><code></code>avant d’autres en-têtes.</p></pre>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X