php - pagina - scraping web
¿Puede una solicitud HTTP basada en cURL imitar completamente una solicitud basada en navegador? (2)
Esta página tiene todas las respuestas a sus preguntas . Puedes imitar las cosas en su mayoría.
Esta es una pregunta de dos partes.
Q1: ¿Puede la solicitud basada en cURL imitar al 100% una solicitud basada en el navegador?
P2: En caso afirmativo, ¿qué opciones se deben establecer? Si no, ¿qué más hace el navegador que no puede ser imitado por cURL?
Tengo un sitio web y veo que se realizan miles de solicitudes desde una sola IP en muy poco tiempo. Estas solicitudes cosechan todos mis datos. Cuando se miró el registro para identificar el agente utilizado, parece una solicitud del navegador. Así que tenía curiosidad por saber si es un bot y no un usuario.
Gracias por adelantado
R1: Supongo que si configuras todas las cabeceras correctas, sí, una solicitud basada en curl puede imitar una basada en navegador: después de todo, ambas envían una solicitud HTTP, que es solo un par de líneas de texto después de una convención específica (a saber, el HTTP RFC)
R2: la mejor manera de responder esa pregunta es echar un vistazo a lo que está enviando su navegador; con Firefox, por ejemplo, puedes usar Firebug o LiveHTTPHeaders para obtener eso.
Por ejemplo, para obtener esta página, Firefox envió esos encabezados de solicitud:
GET /questions/1926876/can-a-curl-based-http-request-imitate-a-browser-based-request-completely HTTP/1.1
Host: .com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.2b4) Gecko/20091124 Firefox/3.6b4
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://.com/questions/1926876/can-a-curl-based-http-request-imitate-a-browser-based-request-completely/1926889
Cookie: .......
Cache-Control: max-age=0
(Acabo de eliminar un par de informaciones, pero ya entendiste la idea ;-))
Usando curl, puede trabajar con curl_setopt
para establecer los encabezados HTTP; aquí, probablemente tenga que usar una combinación de CURLOPT_HTTPHEADER
, CURLOPT_COOKIE
, CURLOPT_USERAGENT
, ...