PHP и http-заголовки

Зачастую, чтобы получить необходимую информацию с удаленного сайта средствами PHP, необходимо формировать и отправлять http-заголовки. Предположим, скрипт, отправляющий заголовки и запрашивающий данные доступен по адресу example.com/request.php. Но перед запуском скрипта, желательно его протестировать - проверить, отправляются ли все необходимые HTTP заголовки? Для теста можно воспользоваться отдельным скриптом, расположив, например, его по адресу example.com/answer.php, который бы в ответе передавал все полученные заголовки.

С заголовком "User-agent" все просто:

request.php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://example.com/answer.php');
curl_setopt($ch, CURLOPT_TIMEOUT, 3);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)');
$page = curl_exec($ch);
curl_close($ch);
echo $page;
answer.php
echo $_SERVER['HTTP_USER_AGENT'];

Но вот как быть, если нужно просмотреть все, отправляемые скриптом request.php HTTP заголовки? Одно из решений - воспользоваться функцией PHP getallheaders(), которая в результате выполнения вернет все заголовки HTTP-запроса в виде ассоциативного массива:

answer.php
foreach (getallheaders() as $name => $value)
  {
  echo "$name: $value\n";
  }

Чтобы посмотреть все отправляемые, с помощью функций cURL, http-заголовки - можно обойтись и одним скриптом answer.php:

request.php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://example.com/answer.php');
curl_setopt($ch, CURLOPT_TIMEOUT, 3);
curl_setopt($ch, CURLOPT_USERAGENT, 'Робот');
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
$page = curl_exec($ch);
$sent_headers = curl_getinfo($ch, CURLINFO_HEADER_OUT);
curl_close($ch);
echo $sent_headers;

Константа CURLINFO_HEADER_OUT в функции curl_getinfo() выведет в переменную $sent_headers все отправляемые заголовки - чтобы это произошло, необходимо добавить после всех вызовов функций curl_setopt() такой вызов: curl_setopt($ch, CURLINFO_HEADER_OUT, true).

Опубликовано: 2012/05/23
HTML-код ссылки на эту страницу:
<a href="http://petrenco.com/php.php?txt=139" target="_blank">PHP и http-заголовки</a>
17774
Добавить комментарий
Ваш e-mail: (не виден посетителям сайта)
Ваше имя:
Комментарий:
Символы с картинки:
Только выделенные поля формы добавления комментариев обязательны к заполнению.