2011-11-19 15 views
6

Entonces, ¿cómo puedo verificar usando codeigniter si el cliente es curl, y luego devolver algo diferente para él?El agente de usuario CURL

+0

Puede * spoof * o establecer un encabezado de agente de usuario personalizado al usar cURL, por lo que no sería confiable. – MacMac

+1

Pregunto cuál es el agente de usuario predeterminado de cURL o, para el caso, php-cURL – macintosh264

Respuesta

19

Puede falsificar user-agent cuando se usa cURL, por lo que no tiene sentido según el usuario-agente enviado cuando SABE que es una solicitud de CURSO.

Por ejemplo: recientemente escribí una aplicación que obtiene el pagerank de una url de google. Ahora, a Google no le gusta esto, por lo que solo permite que un determinado agente de usuario acceda a sus servidores de búsqueda de páginas. ¿Solución? La falsificación del usuario-agente usando cURL y Google no será más inteligente.

Moraleja de la historia: los agentes de usuario de cURL NO SON confiables.

Si todavía quiere hacer esto, entonces usted debería ser capaz de obtener el agente de usuario pasada al igual que lo normal

$userAgent=$_SERVER['HTTP_USER_AGENT']; 

EDITAR Una prueba rápida probó esto:

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

Caso 1: http://localhost/dumpx.php?u=y

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

Caso 2: http://localhost/dumpx.php?u=n

n $ _SERVER [ 'HTTP_USER_AGENT']

Esto demuestra que no hay ningún agente de usuario predeterminado para rizo: se simplemente no lo pasará en el encabezado de solicitud

+0

Estaba obteniendo el "código": "invalid_header", "message": "invalid request header", "details": "El encabezado 'User-Agent' está mal formado, falta o tiene un valor no válido." Al enviar un Solicitud de CURL usando PHP y su solución funcionó a las mil maravillas. Solo necesita especificar 'User-agent:'. $ _ SERVER ['HTTP_USER_AGENT']. ¡Gracias! –

1

Puede spoof o establecer un encabezado de agente de usuario personalizado cuando se utiliza cURL, por lo que no sería confiable.

De lo contrario, usted puede hacer esto:

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

Esto puede ocurrir solamente si la solicitud cURL contenía curl en la cabecera del agente de usuario.

Por lo que sé, no hay un agente de usuario predeterminado configurado al hacer una solicitud de curl.

+0

'Hasta donde sé, no hay un valor predeterminado' ... - cURL envía un agente de usuario predeterminado como 'User-Agent: curl/7.47.0' si no especifica uno manualmente. – samiles

2

cURL significa - Biblioteca de URL de cliente y el objetivo de todo esto es poder realizar solicitudes que sean idénticas a las que haría un cliente.

Lo único que puede hacer es detectar la información que forma parte de la solicitud, como la dirección IP, los encabezados de solicitud HTTP, cookies/cookie de identificación de sesión, URL (ruta/página) y cualquier información de publicación/obtención . Si la persona que usa curl para realizar la solicitud lo hace desde una dirección IP esperada y está suministrando los valores esperados de encabezado/cookie/token/URL/post/get, entonces no podrá distinguir una solicitud de curl de un navegador que esté realizando la solicitud.

3

Si desea detectar bots no puede confiar en el agente de usuario.Las mejores prácticas son:

  1. Compruebe que su visitante ejecute js (no todos los usuarios humanos también lo hacen).
  2. Compruebe que su visitante cargue archivos adicionales relacionados con la página web (css, imágenes, etc.)
  3. Compruebe los tiempos de espera de los visitantes. Generalmente, los humanos no cargan 10 páginas por segundo.
Cuestiones relacionadas