Get Header from PHP cURL response

79,464

Solution 1

It converts all headers into an array

// 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 = [];
$output = rtrim($output);
$data = explode("\n",$output);
$headers['status'] = $data[0];
array_shift($data);

foreach($data as $part){

    //some headers will contain ":" character (Location for example), and the part after ":" will be lost, Thanks to @Emanuele
    $middle = explode(":",$part,2);

    //Supress warning message if $middle[1] does not exist, Thanks to @crayons
    if ( !isset($middle[1]) ) { $middle[1] = null; }

    $headers[trim($middle[0])] = trim($middle[1]);
}

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

Solution 2

For the first answer note that the code:

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

will produce wrong results with string data containing :, like for example:

Sat, 14 Jan 2017 01:10:01 GMT

The correct code to split the fields to build the array would be like:

$middle=explode(":",$part,2);
Share:
79,464
Tuan Dinh
Author by

Tuan Dinh

Updated on July 09, 2022

Comments

  • Tuan Dinh
    Tuan Dinh almost 2 years

    I am new to PHP. I am trying to get the Header from the response after sending the php curl POST request. The client sends the request to the server and server sends back the response with Header. Here is how I sent my POST request.

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

    Here is the Header response from server that I get from the browser

    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) 
    

    How can I extract the Authorization part from the Header ?. I need to store it in the cookies