Foros del Web » Programando para Internet » PHP »

Simular PERFECTAMENTE un navegador con php y leer cualquier contenido de sitios

Estas en el tema de Simular PERFECTAMENTE un navegador con php y leer cualquier contenido de sitios en el foro de PHP en Foros del Web. actualmente uso la siguiente funcion (usando las librerías curl) para tomar el contenido de una web Código PHP: <? function  GetHTML ( $d , $method ...
  #1 (permalink)  
Antiguo 02/10/2006, 06:21
Avatar de ASCENDEDMASTERS  
Fecha de Ingreso: julio-2005
Ubicación: Pergamino, Buenos Aires
Mensajes: 302
Antigüedad: 18 años, 9 meses
Puntos: 1
Simular PERFECTAMENTE un navegador con php y leer cualquier contenido de sitios

actualmente uso la siguiente funcion (usando las librerías curl) para tomar el contenido de una web

Código PHP:
<?

function GetHTML($d,$method,$vars,$ref='')
{
    
$ch curl_init();
    
curl_setopt($chCURLOPT_URL,$d);
    
curl_setopt($chCURLOPT_REFERER$ref);
    
curl_setopt ($chCURLOPT_USERAGENT"Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
    
curl_setopt($chCURLOPT_RETURNTRANSFER,1);
    
curl_setopt($chCURLOPT_MAXREDIRS,3);
    
curl_setopt($ch,CURLOPT_VERBOSE,0);   // me informará (si esta en cero) de todos los errores que halla curl
    
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,3);
    if (
$method == 'POST')
    {
        
curl_setopt($chCURLOPT_POST1);
        
curl_setopt($chCURLOPT_POSTFIELDS$vars);
    }
    
$buffer curl_exec ($ch);
    
curl_close ($ch);
    unset(
$ch);
    return 
$buffer;
}

Pero el problema es que por ejemplo google se da cuenta y me dice unable tu aply your request o algo asi y otros sitios tambien. Que es lo que me falta agregar para simular perfectamente un navegador y no me rechasen?

Otra cosa, hay sitios que cuando intentas entrar con la direccion "http://dominio.algo" automaticamente tu navegador te redirecciona a (sies que lo tiene) el dominio con su subdominio, osea http://www.dominio.algo/
como hago para que ucando leo el contenido de ese sitio no me muestre el cartel del servidor

Código:
Found
The document has moved here.

Apache/1.3.29 Server at dominio.algo Port XX
Que le falta?
__________________
Dios es la unica fuente de todo bien.
  #2 (permalink)  
Antiguo 02/10/2006, 08:03
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Por mi parte desconozco al detalle el protocolo HTTP y .. esto es necesario conocerlo para poder "simular" un "cliente HTTP" bajo PHP y tomar así en cuenta todo tipo de casos, como los que las páginas se mueven .. las que redireccionan, las que generan cookies o sesiones, las que pasan por SSL, las que implementan autentificación HTTP .. .. etc.

Aquí tienes muchas classes que implementan en modo cliente el protocolo HTTP con PHP:
http://www.phpclasses.org/browse/class/6.html

No te puedo recomendar una en concreto por qué no las he usado .. pero es cosa de que las pruebes a ver que resultados te dán.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 02/10/2006, 12:40
Avatar de ASCENDEDMASTERS  
Fecha de Ingreso: julio-2005
Ubicación: Pergamino, Buenos Aires
Mensajes: 302
Antigüedad: 18 años, 9 meses
Puntos: 1
Que onda???

miren lo que me dice firefox ahora :s




la pagina a la que quiero entrar es esta, es un php pero no le paso ningun dato, simplemente me tiene que mostrar un form para poner la url que voy a usar en curl.

Código PHP:
<?

include("proxy.class.php");

$wz= new wz777;


if(isset(
$_POST['viso_url']) && !isset($_GET['code']))
{
    global 
$vars,$method;
    
$vars=$method=false;
    foreach(
$_POST as $key => $arr)
        if(
$key!='viso_url')
        {
            global 
$vandera,$vars;
            
$vandera=TRUE;
            
$vars.=$key.'='.$_POST[$key].'&';
        }
        else
        {
            global 
$dominio;
            
$dominio=$_POST[$key];
        }
    if(
$vandera===TRUE)
        
$method=POST;
}
else
{
    
$method=$vars=false;
    if(isset(
$_GET))
    {
        global 
$link,$vars;
        
$vars='';
        foreach(
$_GET as $indice => $base)
        {
            if(
substr($indice,0,4)=='miro' && is_numeric(str_replace('miro','',$indice)))
            {
                global 
$tomar;
                
$tomar=str_replace('miro','',$indice);
            }
            else
            {
                global 
$vars;
                
$vars.=$indice.'='.$_GET[$indice].'&';
            }
        }
        
//$codigo=intval($_GET['code']);
        
mysql_query('DELETE FROM pagina WHERE pag_time<'.(time()-600),$link);
        if(
mysql_affected_rows()==-1)
        {
            
header("Location: proyecto.php");
            exit;
        }
        global 
$tomar;
        
$sql='SELECT * FROM pagina WHERE pag_id='.$tomar;      // SEGUIRRRRR
        
if(!($query=mysql_query($sql,$link)))
        {
            
header("Location: proyecto.php");
            exit;
        }
        else
        {
            global 
$ref,$dominio;
            
$row=mysql_fetch_assoc($query);
            
$ref=trim($row['pag_viene']);
            
$dominio=trim($row['pag_dire']);
            if(
$vars!='')
            {
                global 
$dominio;
                if(
strpos('?',$dominio)!==false)
                {
                    
$dominio=str_replace('&amp;','&',$dominio);
                    
$alg=(substr($dominio,-1,1)=='&')?'':'&';
                    
$dominio.=$alg.$vars;
                }
                else
                    
$dominio.='&'.$vars;
            }
                    
                     
        }
    }    
    else
    {    
        echo 
'<div align="center">
  <form id="form1" name="form1" method="post" action="proyecto.php">
    <input name="viso_url" type="text" id="viso_url" value="http://" />
      <input type="submit" name="Submit" value="aver?" />
  </form>
  </div>'
;
          exit;
    }
}


function 
GetHTML($d,$method,$vars,$ref='')
{
    
$ch curl_init();
    
curl_setopt($chCURLOPT_URL,$d);
    
curl_setopt($chCURLOPT_REFERER$ref);
    
curl_setopt ($chCURLOPT_USERAGENT"Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
    
curl_setopt($chCURLOPT_RETURNTRANSFER,1);
    
curl_setopt($chCURLOPT_MAXREDIRS,3);
    
curl_setopt($ch,CURLOPT_VERBOSE,0);   // me informará (si esta en cero) de todos los errores que halla curl
    
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
    if (
$method == 'POST')
    {
        
curl_setopt($chCURLOPT_POST1);
        
curl_setopt($chCURLOPT_POSTFIELDS$vars);
    }
    
$buffer curl_exec ($ch);
    
curl_close ($ch);
    unset(
$ch);
    return 
$buffer;
}


$ht=GetHTML($dominio,$method,$vars);

echo 
$wz->raiz($ht,$dominio);

?>

y ahora??
__________________
Dios es la unica fuente de todo bien.

Última edición por ASCENDEDMASTERS; 05/10/2006 a las 14:58
  #4 (permalink)  
Antiguo 02/10/2006, 14:22
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
El mensaje de error te dice que el sitio al que te conectas al parecer genera unas cookies que tu código no procesa y por eso no es capaz de entregar la página (por alguna validación de cookies? .. no sé).

Te decía de probar otras alternativas, sobre todo más completas a lo que uses tal vez pues algunas gestionan el tema de cookies y demás.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 02/10/2006, 18:01
Avatar de ASCENDEDMASTERS  
Fecha de Ingreso: julio-2005
Ubicación: Pergamino, Buenos Aires
Mensajes: 302
Antigüedad: 18 años, 9 meses
Puntos: 1
Cita:
Iniciado por Cluster Ver Mensaje
El mensaje de error te dice que el sitio al que te conectas al parecer genera unas cookies que tu código no procesa y por eso no es capaz de entregar la página (por alguna validación de cookies? .. no sé).

Te decía de probar otras alternativas, sobre todo más completas a lo que uses tal vez pues algunas gestionan el tema de cookies y demás.

Un saludo,

Voy a ver, pero si te fijas no uso nada de cookies
__________________
Dios es la unica fuente de todo bien.
  #6 (permalink)  
Antiguo 03/10/2006, 20:54
Avatar de ASCENDEDMASTERS  
Fecha de Ingreso: julio-2005
Ubicación: Pergamino, Buenos Aires
Mensajes: 302
Antigüedad: 18 años, 9 meses
Puntos: 1
solucionado el tema del cartel de firefox, el problema es que algunas paginas se dan cuenta que es un script el que esta intentando leerla. que le falta para simularla completamente?
__________________
Dios es la unica fuente de todo bien.

Última edición por ASCENDEDMASTERS; 03/10/2006 a las 21:41
  #7 (permalink)  
Antiguo 03/10/2006, 21:01
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por ASCENDEDMASTERS Ver Mensaje
solucionado, si miran mi codigo tenia un

if(isset($_GET)) y si no pasaba ninguna variable por get yo pense que nunca sería seteado y siempre esta, ese fue el error. entonces luego iva a un query que no lo hacia y seredireccionaba y se hacia un redireccionamiento infinitas veces a si misma por eso largaba este error. Que loco no?
Pues si .. bien "loco" el problema.

Lamentablemente no siempre los que intetamos responder a las preguntas que Uds. formulan tienen oportunidad de probar el código que presentan. Analizar código "al ojo" es complicado.

Me alegro que resolvieses tu problema y que quede el código como ejemplo (podrías editar tu mensaje con el código incorrecto para que funcional y sirva de ejemplo).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 05/10/2006, 15:02
Avatar de ASCENDEDMASTERS  
Fecha de Ingreso: julio-2005
Ubicación: Pergamino, Buenos Aires
Mensajes: 302
Antigüedad: 18 años, 9 meses
Puntos: 1
Cita:
Iniciado por Cluster Ver Mensaje
Pues si .. bien "loco" el problema.

Lamentablemente no siempre los que intetamos responder a las preguntas que Uds. formulan tienen oportunidad de probar el código que presentan. Analizar código "al ojo" es complicado.

Me alegro que resolvieses tu problema y que quede el código como ejemplo (podrías editar tu mensaje con el código incorrecto para que funcional y sirva de ejemplo).

Un saludo,
Gracias

Pero aun queda algo, y es el tema de la funcion que toma el contenido de los sitios. Hay sitios que se dan cuenta que soy un script, ejemplo --> google.com, es una pagina que la conoce todo el mundo y para probar mi script no se me ocurrio mejor cosa que poner "http://www.google.com"

ahi encontre un bug digamos, y otra cosa, que acepte redireccionamientos. Estoy en eso de ver unas clases como me dijiste vos cluster pero pasa que quiero aprender a manejarlo perfectamente yo. De curl no he encontrado nada explicado BIEN BIEN en detalle que significa cada una de las constantes y con su respectivo ejemplo. Pero bueno... es como todo, el que tiene hambre que se la compre, tendre que seguir el calisico camino, buscar buscar y buscar probar y probar leer y leer

Saludos
__________________
Dios es la unica fuente de todo bien.
  #9 (permalink)  
Antiguo 05/10/2006, 15:05
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Te recomiendo, que busques en google una clase que se llama Snoopy, a lo mejor te puede servir, sirve para hacer eso, simular un browser desde PHP.

Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:16.