Пользовательский агент CURL - PullRequest
10 голосов
/ 19 ноября 2011

Так как я могу проверить с помощью codeigniter, если клиент curl, а затем вернуть что-то другое для него?

Ответы [ 4 ]

23 голосов
/ 19 ноября 2011

Вы можете подделать пользовательский агент при использовании cURL, поэтому это бессмысленно в зависимости от того, пользовательский агент отправляется, когда вы ЗНАЕТЕ, что это запрос cURL.

Например: я недавно написалприложение, которое получает PageRank URL от Google.Сейчас Google это не нравится, поэтому он разрешает доступ к своим серверам PageRank только определенному пользовательскому агенту.Решение?Поддать пользовательский агент, используя cURL, и Google не станет мудрее.

Мораль истории: пользовательские агенты cURL просто НЕ надежны.

Если вы все еще хотите это сделать, то выдолжен иметь возможность получить переданный пользовательский агент, как обычно

$userAgent=$_SERVER['HTTP_USER_AGENT'];

EDIT Быстрый тест подтвердил это:

dumpx.php:

<?php

    $url="http://localhost/dump.php";

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    if($_GET['u']==y) {  
    curl_setopt($ch, CURLOPT_USERAGENT, "booyah!");
    }
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);

    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
    curl_setopt($ch, CURLOPT_TIMEOUT, 60);
    //curl_setopt($ch, CURLOPT_CUSTOMREQUEST,'GET');
    curl_setopt ($ch, CURLOPT_HEADER, 0);
    $exec=curl_exec ($ch);
?>

dump.php:

<?php
    var_dump($_SERVER);
?>

Дело 1: http://localhost/dumpx.php?u=y

 'HTTP_USER_AGENT' => string 'booyah!' (length=7)

Дело 2: http://localhost/dumpx.php?u=n

Нет $ _SERVER ['HTTP_USER_AGENT']

Это доказывает, что пользовательского агента по умолчанию для curl не существует: он просто не будет передавать его в заголовке запроса

3 голосов
/ 19 ноября 2011

Если вы хотите обнаружить ботов, вы не можете полагаться на пользовательский агент.Лучшие практики:

  1. Убедитесь, что ваш посетитель запускает js (не все пользователи-пользователи тоже).
  2. Убедитесь, что ваш посетитель загружает дополнительные файлы, связанные с веб-страницей (css, изображения)и т. д.)
  3. Проверьте время ожидания посетителя.Люди обычно не загружают 10 страниц в секунду.
2 голосов
/ 19 ноября 2011

cURL означает - Клиентская библиотека URL, и весь смысл ее в том, чтобы иметь возможность делать запросы, идентичные тому, что будет делать клиент.

Единственное, что вы можете сделать, это обнаружить информацию, являющуюся частью запроса, такую ​​как IP-адрес, заголовки HTTP-запроса, cookie-файлы / cookie идентификатора сеанса, URL (путь / страница) и любые данные post / get. Если человек, использующий curl для выполнения запроса, выполняет его с ожидаемого IP-адреса и предоставляет любые ожидаемые значения header / cookie / token / URL / post / get, то вы не сможете отличить запрос curl от создания браузера. запрос.

1 голос
/ 19 ноября 2011

Вы можете подделать или установить пользовательский заголовок пользовательского агента при использовании cURL, чтобы он не был надежным.

В противном случае вы можете сделать это:

if(strtolower($this->input->server('HTTP_USER_AGENT', true)) == 'curl')
{
    // Is using cURL
}

Это произойдет, только если запрос cURL содержал curl в заголовке пользовательского агента.

Насколько мне известно, при выполнении запроса curl не установлен пользовательский агент по умолчанию.

...