Autor Tema: problemas para obtener html de una url  (Leído 4084 veces)

0 Usuarios y 1 Visitante están viendo este tema.

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
problemas para obtener html de una url
« en: Octubre 10, 2011, 01:01:39 am »
Hola quiero obtener el contenido de una url, ya he probado algunos metodos y el que más cercano está, es con curl_init(), me devuelve el html correctamente, pero me surge un problema con algunas url, el problema mayor es que mi servidor no soporta la opcion CURLOPT_FOLLOWLOCATION (que seria que si hay una redirección este la siga) (requiere open_basedir ="" y safe_mode  = Off) no quisiera modificar esas opciones.

Entonces lo que hice fue curl_getinfo($rch, CURLINFO_HTTP_CODE);  y si es = 301 o 302 obtener el Location y consultar esa url, pero esta no devuelve el contenido real, sospecho que me esta faltando asignar alguna cookie, pero es hay donde me travo, si bien se como obtenerla no se como asignarla.

este es el código básico (sin la redención)
Código: [Seleccionar]
function ver($url)
{

$ch = curl_init();

curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 Safari/535.1");
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_NOBODY, false);
curl_setopt($ch, CURLOPT_FORBID_REUSE, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url);
//curl_setopt($ch, CURLOPT_COOKIESESSION, true);
//curl_setopt($ch,  CURLOPT_COOKIEJAR, "listin");
//curl_setopt($ch,  CURLOPT_COOKIEFILE, "listin");

$tmp = curl_exec($ch);

curl_close ($ch);
    return $tmp;
}

para no dar muchas vueltas alguien sabe como podria obtener el contenido de esta url?

Código: [Seleccionar]

http://www.taringa.net/posts/reviews/12759660/Como-ver-Cuevana-en-HD-_Facil_.html#pagina-3

como ven es la página 3 de los comentarios.


Saludos.

Hugo

  • Visitante
Re:problemas para obtener html de una url
« Respuesta #1 en: Octubre 10, 2011, 04:42:31 pm »
Hola Leandro,

Muy buenos días, espero que estés bien.

Te comento algo que muy probablemente ya sabías...
Cuando obtienes el contenido de una URL con PHP, no estás ejecutando el JavaScript dentro; para PHP es solo texto.
 

Eso es lo que está pasando, en esa página existe un JavaScript que trae por AJAX la tercer página de comentarios...
En el código fuente de la página, encontrarás la siguiente línea:

Código: [Seleccionar]
<script type="text/javascript">var x = location.href.split('#pagina-');if (x[1]) comment.page(x[1])</script>

Te recomiendo el browser Firefox y la herramienta Firebug, para ver el comportamiento de ésta y cualquier página.

 
 
Finalmente...
Me tomé unos minutos, que luego se convirtieron en horas, para traer los comentarios desde PHP, usando algo de tu código...
Igualmente, falta pasarle bien la cookie, ya que de la forma que lo hago, se rompe...
Tuve que "hardcodear" una cookie a mano, para que traiga bien la tercer página de comentarios..

Código: [Seleccionar]
<?phpfunction ver($url, $cookie=false){	$ch = curl_init();	curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 Safari/535.1");	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);	curl_setopt($ch, CURLOPT_HEADER, true);		if($cookie){		list($url, $postfields) = explode('?', $url);				#$cookie = array("Cookie: $cookie");		$cookie = array("Cookie: img_host=1; SAV2=1140122501.36606ba3; __gads=ID=0c6325977d856452:T=1318262296:S=ALNI_MYUrhWjSc1HanJWKewVHFosrWVwEg; __utma=191395631.2096305582.1318262308.1318262308.1318265692.2; __utmz=191395631.1318262308.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __qca=P0-1741169349-1318262308074; trngssn=50038517; __utmb=191395631.1.10.1318265692; __utmc=191395631");		curl_setopt($ch, CURLOPT_HTTPHEADER, $cookie);		curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);	}		curl_setopt($ch, CURLOPT_URL, $url);	$tmp = curl_exec($ch);	curl_close ($ch);	return $tmp;}function cookies($content){	$coo = Array();	$arr = explode("\n", $content);	for($i=0; $i<10; $i++){		if(strpos($arr[$i], "Set-Cookie") !== false){			$coo[] = str_replace("Set-Cookie: ", "", $arr[$i]);		}	}	return implode(";", $coo);}function getPostfields($url){	$arr	= explode('/', $url);	$post	= "";	$page	= "";	for ($i=0; $i<count($arr); $i++){		if($arr[$i]!=""){			//El id del post siempre es numerico?			if(is_numeric($arr[$i])){				$post = $arr[$i];			}			//Obteniendo pagina de comentario			if(strpos($arr[$i], "#pagina-") !== false){				list($url, $num) = explode("#pagina-", $arr[$i]);				$page = $num;			}		}	}	return "id=$post&p=$page";}$url_pagina		= "http://www.taringa.net/posts/reviews/12759660/Como-ver-Cuevana-en-HD-_Facil_.html#pagina-3";$url_comentario		= "http://www.taringa.net/ajax/comment-page.php";$postfields		= "";$cookies		= "";//Cargando pagina, cookies y datos de POST$contenido		= ver($url_pagina);$cookies		= cookies($contenido);$postfields		= getPostfields($url_pagina);//Ver la tercer pagina de comentariosecho ver($url_comentario."?$postfields", $cookies);?>


Avisame cualquier cosa,
Un saludo,
Hugo

PD: Vos sabes porqué veo con el browser y firebug, valores en las cookies que no lo veo al leerlo con PHP???
PD: Valores como por ejemplo "__utma=191395631.209..."
 
 

****************************************************************************************************
 OTRO DETALLE MÁS
****************************************************************************************************


Con Google Chrome también se puede ver las cookies, las cabeceras HTTP y todo lo demás...

Para eso, seguir los siguiente pasos:
  • Abrir con Chrome la página
  • Precionar "F12" para activar la "Herramientas para desarrolladores"
  • En esta herramienta, hacer click en "Network"
  • En el menú de abajo, hacer click en "XHR", que significa "XHTTP-Request"
  • Finalmente, seleccionar "comment-page.php"

 
Les dejo una captura de pantalla para que lo vean...

« última modificación: Octubre 10, 2011, 06:52:29 pm por Hugo »

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Re:problemas para obtener html de una url
« Respuesta #2 en: Octubre 10, 2011, 09:07:23 pm »
Hola Hugo, gracias por la función me vino al pelo para ver el tema de las cookies, pero bueno yo estuve haciendo algunas investigaciones y llegue casi a la misma conclusión, es javascript el que escrive los coment en ejecución, aca lo explique.
tambien investigando llegue a esta url http://www.taringa.net/ajax/comment-page.php donde enviando en metodo POST el ID y P (pagina) te da el listado de los comentarios de la pagina.
Pero despues me di cuenta que era mas facil aun, yo necesitaba saber que desde que pagina se hacia el REFERER (a una imagen.php que yo pondría en los comentarios) ($_SERVER['HTTP_REFERER']) pero no lo avía testeado y suponía que iva a ser esta

Citar
http://www.taringa.net/posts/reviews/12759660/Como-ver-Cuevana-en-HD-_Facil_.html#pagina-3

cuando en realidad, era una url mas amigable la que pasan como referencia.

Citar
http://www.taringa.net/posts/reviews/12759660.3/Como-ver-Cuevana-en-HD-_Facil_.html

y esta no requiere ninguna redirección, asi que bueno asunto solucionado.

Muchas gracias por tu ayuda.