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
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>";
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);
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 ");