11.4. Fetching a URL with Headers
Problem
You want to retrieve a URL that requires specific headers to be sent with the request for the page.
Solution
Use the
cURL extension and the
CURLOPT_HTTPHEADER
option:
$c = curl_init('http://www.example.com/special-header.php'); curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); curl_setopt($c, CURLOPT_HTTPHEADER, array('X-Factor: 12', 'My-Header: Bob')); $page = curl_exec($c); curl_close($c);
If cURL isn’t available, use the addHeader( )
method in HTTP_Request
:
require 'HTTP/Request.php'; $r = new HTTP_Request('http://www.example.com/special-header.php'); $r->addHeader('X-Factor',12); $r->addHeader('My-Header','Bob'); $r->sendRequest(); $page = $r->getResponseBody();
Discussion
cURL has special options for setting the
Referer
and User-Agent
request headers — CURLOPT_REFERER
and
CURLOPT_USERAGENT
:
$c = curl_init('http://www.example.com/submit.php'); curl_setopt($c, CURLOPT_VERBOSE, 1); curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); curl_setopt($c, CURLOPT_REFERER, 'http://www.example.com/form.php'); curl_setopt($c, CURLOPT_USERAGENT, 'CURL via PHP'); $page = curl_exec($c); curl_close($c);
See Also
Recipe 11.14 explains why
“referrer” is often misspelled
“referer” in web programming
contexts; documentation on curl_setopt( )
at
http://www.php.net/curl-setopt; the PEAR
HTTP_Request
class at
http://pear.php.net/package-info.php?package=HTTP_Request.
Get PHP Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.