Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Split cURL header info into array

Tags:

php

curl

Consider the following PHP cURL command:

$url = 'http://bit.ly/faV1vd';

$_h = curl_init();
curl_setopt($_h, CURLOPT_HEADER, 1);
curl_setopt($_h, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($_h, CURLOPT_HTTPGET, 1);
curl_setopt($_h, CURLOPT_URL, $url);
curl_setopt($_h, CURLOPT_DNS_USE_GLOBAL_CACHE, false );
curl_setopt($_h, CURLOPT_DNS_CACHE_TIMEOUT, 2 );

$return = curl_exec($_h);

This returns:

HTTP/1.1 301 Moved
Server: nginx
Date: Sun, 29 Apr 2012 12:48:07 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Set-Cookie: _bit=4f9d3887-00215-020af-2f1cf10a;domain=.bit.ly;expires=Fri Oct 26 12:48:07 2012;path=/; HttpOnly
Cache-control: private; max-age=90
Location: http://www.macroaxis.com/invest/market/VZ--Sat-Feb-26-06-16-35-CST-2011?utm_source=twitterfeed&utm_medium=twitter
MIME-Version: 1.0
Content-Length: 209

I want to split the header info into an array, as follows

[Status] => HTTP/1.1 301 Moved,
[Server] => nginx,
[Date] => Sun, 29 Apr 2012 12:48:07 GMT,
...
[Content-Length] => 209

So: - the first line (HTTP/1.1 301 Moved) should be the value of [Status] - all other header info should be split on :

I'm not succeeding in splitting the header info:

explode("\r\n\r\n", $return);
explode("\r\n", $return);

This doesn't split the header into an array (to further split on :, etc. as expected. What am I doing wrong?

like image 910
Pr0no Avatar asked Dec 06 '22 15:12

Pr0no


1 Answers

The answer by Altaf Hussain is good but does not support a case where the header response contains a ':'. i.e. X-URL: http://something.com. In this case the $myarray will only contain ('X-URL' => 'http')

This can be fixed by adding the limit parameter and setting it to 2. In addition, there should be a space after the colon. So the full solution with the bug fix is:

$myarray=array();
$data=explode("\n",$return);

$myarray['status']=$data[0];

array_shift($data);

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

print_r($myarray);
like image 124
Guedalia Avatar answered Dec 10 '22 11:12

Guedalia