11.3. Fetching a URL with Cookies
Problem
You want to retrieve a page that requires a cookie to be sent with the request for the page.
Solution
Use the cURL extension and the
CURLOPT_COOKIE
option:
$c = curl_init('http://www.example.com/needs-cookies.php');
curl_setopt($c, CURLOPT_VERBOSE, 1);
curl_setopt($c, CURLOPT_COOKIE, 'user=ellen; activity=swimming');
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
$page = curl_exec($c);
curl_close($c);If cURL isn’t available, use the addHeader( )
method in the PEAR HTTP_Request class:
require 'HTTP/Request.php';
$r = new HTTP_Request('http://www.example.com/needs-cookies.php');
$r->addHeader('Cookie','user=ellen; activity=swimming');
$r->sendRequest();
$page = $r->getResponseBody();Discussion
Cookies are sent to the server in the
Cookie
request header. The cURL extension has a cookie-specific option, but
with HTTP_Request, you have to add the
Cookie header just as with other request headers.
Multiple cookie values are sent in a semicolon-delimited list. The
examples in the Solution send two cookies: one named
user with value ellen and one
named activity with value
swimming.
To request a page that sets cookies and then make subsequent requests
that include those newly set cookies, use cURL’s
“cookie jar” feature. On the first
request, set CURLOPT_COOKIEJAR to the name of a
file to store the cookies in. On subsequent requests, set
CURLOPT_COOKIEFILE to the same filename, and cURL reads the cookies from the file and sends them along with the ...