Итак, как я могу проверить с помощью codeigniter, если клиент завиток, а затем вернуть что-то другое для него?
Вы можете подделать пользовательский агент при использовании cURL, поэтому это бессмысленно в зависимости от агента пользователя, отправленного, когда вы ЗНАЕТ это запрос cURL.
Например: недавно я написал приложение, которое получает pagerank URL-адреса из Google. Теперь Google это не нравится, поэтому он позволяет только определенному пользовательскому агенту получать доступ к своим серверам pagerank. Решение? Объясните, что пользователь-агент использует cURL, и Google не будет более мудрее.
Мораль истории: пользовательские агенты cURL JUST NOT надежны.
Если вы все еще хотите это сделать, тогда вы сможете получить переданный пользовательский агент, как обычно
$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 означает: – Клиентская библиотека URL-адресов, и весь ее смысл состоит в том, чтобы делать запросы, идентичные тем, что сделает клиент.
Единственное, что вы можете сделать, это обнаружить информацию, которая является частью запроса, такую как IP-адрес, заголовки HTTP-запросов, cookie-файлы cookie cookie, URL-адрес (путь / страница) и любые данные post / get. Если человек, использующий завиток для выполнения запроса, выполняет его с ожидаемого IP-адреса и подает любые ожидаемые значения заголовка / cookie / токена / URL-адреса / столбца / получателя, то вы не сможете отличить запрос зависания от браузера, делающего запрос.
Вы можете обманывать или настраивать заголовок пользовательского агента при использовании cURL, поэтому он не будет надежным.
В противном случае вы можете сделать это:
if(strtolower($this->input->server('HTTP_USER_AGENT', true)) == 'curl') { // Is using cURL }
Это произойдет только в том случае, если запрос cURL содержит curl
в заголовке пользовательского агента.
Насколько я знаю, при выполнении запроса на завивки не установлен пользовательский агент по умолчанию.