web-dev-qa-db-fra.com

Obtenir un en-tête de PHP réponse cURL

Je suis nouveau en PHP. J'essaie d'obtenir l'en-tête de la réponse après l'envoi de la demande php curl POST. Le client envoie la demande au serveur et le serveur renvoie la réponse avec Header. Voici comment j'ai envoyé ma demande POST.

   $client = curl_init($url);  
   curl_setopt($client, CURLOPT_CUSTOMREQUEST, "POST");
   curl_setopt($client, CURLOPT_POSTFIELDS, $data_string);
   curl_setopt($client, CURLOPT_HEADER, 1);
   $response = curl_exec($client);
   var_dump($response);

Voici la réponse du serveur en-tête que je reçois du navigateur.

HTTP/1.1 200 OK 
Date: Wed, 01 Feb 2017 11:40:59 GMT 
Authorization: eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2Vycy9CYW9CaW5oMTEwMiIsIm5hbWUiOiJhZG1pbiIsInBhc3N3b3JkIjoiMTIzNCJ9.kIGghbKQtMowjUZ6g62KirdfDUA_HtmW-wjqc3ROXjc Content-Type: text/html;charset=utf-8 Transfer-Encoding: chunked Server: Jetty(9.3.6.v20151106) 

Comment puis-je extraire la partie autorisation de l'en-tête? J'ai besoin de le stocker dans les cookies 

13
Tuan Dinh

Il convertit tous les en-têtes dans un tableau

// create curl resource
$ch = curl_init();

// set url
curl_setopt($ch, CURLOPT_URL, "example.com");

//return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//enable headers
curl_setopt($ch, CURLOPT_HEADER, 1);
//get only headers
curl_setopt($ch, CURLOPT_NOBODY, 1);
// $output contains the output string
$output = curl_exec($ch);

// close curl resource to free up system resources
curl_close($ch);

$headers = [];
$data = explode("\n",$output);
$headers['status'] = $data[0];
array_shift($data);

foreach($data as $part){
    $middle=explode(":",$part);
    $headers[trim($middle[0])] = trim($middle[1]);
}

// Print all headers as array
echo "<pre>";
print_r($headers);
echo "</pre>";
24
Thamaraiselvam

Pour la première réponse, notez que le code: 

$middle=explode(":",$part);

produira des résultats erronés avec des données chaîne contenant :, comme par exemple:

Sat, 14 Jan 2017 01:10:01 GMT

Le code correct pour diviser les champs pour construire le tableau serait le suivant:

$middle=explode(":",$part,2);
2
myHealthbox Admin

Vous venez d'inclure ce code dans votre demande de curl

curl_setopt($curl_exec, CURLOPT_HEADER, true); 
curl_setopt($curl_exec, CURLOPT_NOBODY, true);

après votre exécution curl, utilisez $header_data= curl_getinfo($curl_exec);

Ensuite, vous obtenez tous les en-têtes

print_r($header_data);

ou utilisez le Shell_exec

echo Shell_exec("curl -I http://example.com ");
1