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 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access