Агент пользователя CURL

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

4 ответов


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

например: недавно я написал приложение, которое получает pagerank url-адреса из google. Теперь Google это не нравится, поэтому он позволяет только определенному агенту пользователя получить доступ к своим серверам pagerank. Решение? Спуф пользовательского агента с помощью cURL и Google не будет мудрее.

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

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

$userAgent=$_SERVER['HTTP_USER_AGENT'];

редактировать быстрый тест доказал это:

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);
?>

свалка.на PHP:

<?php
    var_dump($_SERVER);
?>

Пример 1: http://localhost/dumpx.РНР?u=y

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

Пример 2: http://localhost/dumpx.РНР?u=n

нет $_SERVER ['HTTP_USER_AGENT']

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


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

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

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

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


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

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

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

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

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