Acceder a sitios de noticias protegidos con contraseña con contraseña válida a través de c/libcurl

He escrito un rastreador de sitios web en C usando libcurl que puede extraer contenido de texto de cualquier sitio web si lo deseamos.

Sin embargo, lo que necesitamos es poder rastrear sitios web protegidos con contraseña, como los grandes editores de noticias, con suscripciones válidas. Así que tenemos un nombre de usuario/contraseña para estos sitios.

¿Alguien puede ofrecer consejos sobre cómo lograr esto usando libcurl? Soy consciente de que puede agregar el nombre de usuario/contraseña en las opciones de libcurl. Pensé que hacer esto, y simplemente acceder a la página correcta que puede estar protegida con contraseña, sería todo lo que hay que hacer. Aquí hay un extracto del código CURL:

curl_easy_setopt(curlTestHandle, CURLOPT_URL, "mypasswordprotectedwebsiteurl");
curl_easy_setopt(curlTestHandle, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
curl_easy_setopt(curlTestHandle, CURLOPT_FOLLOWLOCATION, 1);
curl_easy_setopt(curlTestHandle, CURLOPT_MAXREDIRS, 5);

curl_easy_setopt(curlTestHandle, CURLOPT_USERPWD, "myusername:mypassword");

res = curl_easy_perform(curlTestHandle);
curl_easy_getinfo (curlTestHandle, CURLINFO_RESPONSE_CODE, &httpResponse);

Sin embargo, ¿tal vez lo estoy simplificando demasiado? ¿Y quizás funcione con algunos sitios web, pero no con otros? ¿Alguien ha hecho y logrado algo similar?

Gracias,

Manoj

preguntado el 22 de mayo de 12 a las 11:05

Si considera usar Python, hay muchas herramientas para este tipo de cosas. (Selinium, Mechanize, etc.) Y sería más fácil ponerse en marcha, aunque la velocidad podría ser un problema:

Secundando el comentario de Indeera. A menos que necesite algún tipo de compatibilidad entre plataformas/dispositivos (como hacer esto en un dispositivo móvil), le recomendamos que use Python. Hago un prototipo de todo lo relacionado con el raspado de pantalla en Python (usando Urllib / Urllib2 / BeautifulSoup) y solo cuando es necesario, muevo a libcurl para el uso del dispositivo. -

1 Respuestas

Depende. Si el sitio genera un número diferente para el campo oculto en el formulario de inicio de sesión, debe analizar (o realizar una búsqueda simple) el archivo HTML para agregar el campo oculto a la solicitud. De lo contrario, puede codificar el valor en su código.

También depende de cuántos sitios web diferentes desee rastrear. Si hay muchos sitios web diferentes, entonces lo mejor que puede hacer es analizar el HTML (o de alguna manera leer el formulario con la búsqueda de cadenas) y obtener los campos que se completarán al iniciar sesión.

También debe leer y configurar las cookies. Creo que libcurl debería tener una función para manejar esto fácilmente.

--- Tengo sueño y puedo estar despotricando fuera del tema. Si esta publicación no ayuda en absoluto, por favor dígame que la elimine.

contestado el 22 de mayo de 12 a las 11:05

Su sugerencia proporcionó algunos consejos útiles, gracias. Habiendo probado esto, parece que puede tomar la cookie enviada por el encabezado de respuesta durante la autenticación. Luego almacene esto y básicamente envíe esto en una nueva solicitud para acceder al contenido detrás del muro de pago. Sin embargo, este concepto no parece funcionar para todos los sitios web que he encontrado. ¡Así que todavía estoy atascado! - Manoj Solanki

¡Lo que estoy encontrando es que la cookie que se envía en la solicitud después de la autenticación es diferente (en realidad más grande con más datos) que la cookie original enviada en la respuesta! - Manoj Solanki

@ManojSolanki: A veces, los sitios web tienen una condición más estricta para servir contenido. Es posible que desee utilizar herramientas como Firebug en Firefox o la herramienta de desarrollo integrada en Safari/Chrome para observar el tráfico y los encabezados. Puede intentar replicar esa información en la solicitud y ver si el servidor atiende la solicitud. - nhahtdh

Sí, eso es exactamente lo que he estado haciendo. Lo que encontré es que algún código javascript que parece escribir una cookie inicial, presumiblemente en la computadora del usuario. Esto luego se usa en solicitudes posteriores y forma parte de la cookie más grande que vi que se estaba enviando. Desafortunadamente, con sitios web como este, no puedo ver cómo puedo pasar el muro de pago si usa javascript para escribir una cookie inicial. Sin embargo, creo que algunos sitios web se podrán rastrear, pero no todos, a menos que me dé por vencido con demasiada facilidad. - Manoj Solanki

Si usan JS para establecer cookies, entonces, dependiendo de la complejidad del código, puede ser imposible rastrear. ¿Ha intentado replicar la ejecución del código JS para configurar la cookie? - nhahtdh

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.