file_get_contents receive cookies file_get_contents receive cookies php php

file_get_contents receive cookies


There's a magic variable for this, called $http_response_header; it's an array comprising all headers that were received. To extract the cookies you have to filter out the headers that start with Set-Cookie:.

file_get_contents('http://example.org');$cookies = array();foreach ($http_response_header as $hdr) {    if (preg_match('/^Set-Cookie:\s*([^;]+)/', $hdr, $matches)) {        parse_str($matches[1], $tmp);        $cookies += $tmp;    }}print_r($cookies);

An equivalent but less magical approach would be to use stream_get_meta_data():

if (false !== ($f = fopen('http://www.example.org', 'r'))) {        $meta = stream_get_meta_data($f);        $headers = $meta['wrapper_data'];        $contents = stream_get_contents($f);        fclose($f);}// $headers now contains the same array as $http_response_header


you should use cURL for that purpose, cURL implement a feature called the cookie jar which permit to save cookies in a file and reuse them for subsequent request(s).

Here come a quick code snipet how to do it:

/* STEP 1. let’s create a cookie file */$ckfile = tempnam ("/tmp", "CURLCOOKIE");/* STEP 2. visit the homepage to set the cookie properly */$ch = curl_init ("http://somedomain.com/");curl_setopt ($ch, CURLOPT_COOKIEJAR, $ckfile); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);$output = curl_exec ($ch);/* STEP 3. visit cookiepage.php */$ch = curl_init ("http://somedomain.com/cookiepage.php");curl_setopt ($ch, CURLOPT_COOKIEFILE, $ckfile); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);$output = curl_exec ($ch);

note: has to be noted you should have the pecl extension (or compiled in PHP) installed or you won't have access to the cURL API.


I realize this is, late, but there is actually a way to at least receive individual cookies sent by the server.

I'm assuming you know how to do the whole stream_create_context business to get your file_get_contents http request rolling, and you just need assistance actually setting the cookies.

After running file_get_contents on a url, the (unfortunately, non-associative) array $http_response_header is set.

If the server is sending back a cookie, one of them will start with 'Set-Cookie: ', which you can extract with substr.

However, at the moment, it appears to me that one can only access -one- Set-Cookie through this variable, which is a limitation I am currently trying to find a way to work around.