Как отправить referer через cURL
Referer - это тот адрес, с которого обратился к странице пользователь. Например, Вы переходите из Google на какую-либо страницу, расположенную в выдаче. В этом случае, для страницы referer'ом является Google. Но статья о другом, эта информация была исключительно для пояснения. В прошлой статье я уже писал, что ответ сервера зачастую зависит от cookie, а, точнее, от заголовков, посланных клиентом. Но помимо cookie в заголовки входит множество других параметров, в частности, referer. И очень важно уметь отправлять нужный referer через cURL для тестирования тех скриптов, которые нуждаются в нём.
Мы не будем сейчас придумывать очень сложные задачи, а лучше рассмотрим всё на самом тривиальном примере. От скрипта-источника передаётся referer, а скрипт-приёмник возвращает его. Далее этот ответ принимает скрипт-источник и печатает результат.
Код файла-приёмника очень простой ("script.php"):
<?php
echo $_SERVER["HTTP_REFERER"];
?>
Теперь нам нужно написать скрипт-источник, который будет отправлять referer через cURL на наш скрипт, написанный выше, а затем получать от него ответ и печатать его.
<?php
if( $curl = curl_init() ) {
curl_setopt($curl, CURLOPT_URL, 'http://temp.local/script.php');
curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl, CURLOPT_REFERER, "http://myrusakov.ru");
$out = curl_exec($curl);
echo $out;
curl_close($curl);
}
?>
Как Вы и догадались, результатом запуска скрипта-источника будет вывод: "http://myrusakov.ru", что вполне логично. А задавали referer мы с помощью опции "CURLOPT_REFERER". Думаю, что здесь всё прозрачно.
Теперь всё-таки о том, где это может пригодиться. Допустим, у Вас на сайте стоит счётчик посещений. И Вы хотите узнать, сколько посетителей приходит из Google. Что для этого нужно? Правильно, подсчитать количество посещений пользователей с referer'ом - Google. И чтобы протестировать такой скрипт вовсе не нужна ссылка, размещённая на Google, а нужно лишь задать referer через cURL и отправить соответствующий запрос на Ваш скрипт.
-
- Михаил Русаков
Комментарии (1):
Добрый день. Вот такой код у меня есть: ---------- if($curl = curl_init()) { // CURL curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER,true); curl_setopt($curl, CURLOPT_REFERER, "http://myrusakov.ru"); curl_setopt($curl, CURLOPT_COOKIE, $COOKIE_STRING); $page = iconv("utf-8", "cp1251", curl_exec($curl)); curl_close($curl); } // CURL ---------- А вот какой ответ я получаю с денвера: ---------- Request URL:http://mysite.ru/foiz/rise.php Request Method:GET Status Code:200 OK Request Headers Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Encoding:gzip,deflate,sdch Accept-Language:ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4 Cache-Control:max-age=0 Connection:keep-alive Host:mysite.ru User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36 Response Headers Connection:Keep-Alive Content-Type:text/html; charset=windows-1251 Date:Sat, 05 Apr 2014 16:01:44 GMT Keep-Alive:timeout=5, max=100 Server:Apache/2.2.22 (Win32) mod_ssl/2.2.22 OpenSSL/1.0.1c PHP/5.3.13 Transfer-Encoding:chunked X-Powered-By:PHP/5.3.13 ---------- Почему в Request Headers не поменялся Host?
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.