Foros del Web » Programando para Internet » PHP »

¿Como puedo extraer informacion de un sitio?

Estas en el tema de ¿Como puedo extraer informacion de un sitio? en el foro de PHP en Foros del Web. Se como extraer informacion de una pagina abriendo archivos pero como entro a esa pagina si para entrar me tengo que logear antes, es decir ...
  #1 (permalink)  
Antiguo 12/05/2003, 18:03
 
Fecha de Ingreso: mayo-2003
Mensajes: 115
Antigüedad: 14 años, 7 meses
Puntos: 0
Pregunta ¿Como puedo extraer informacion de un sitio?

Se como extraer informacion de una pagina abriendo archivos pero como entro a esa pagina si para entrar me tengo que logear antes,

es decir como hago un script que solito se logee y despues me abra el enlace a la pagina para despues extraer la informacion


es mi primer post

Me voy a explicar mas

Hago la pagina para logearme con un formulario este me lleva a la pagina en la cual quiero extraer la informacion

la duda es el formulario me lleva a la pagina ya logeado ahora de que manera atrapo el codigo con un script
  #2 (permalink)  
Antiguo 12/05/2003, 21:44
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Para entrar a esa "página" autentificado .. que típo de autentificación usa? HTTP (esas ventanitas de tu S.O. que te pide user/pass , formulario HTML ...?¿

Por ejemplo .. si la página usa autentificación HTTP se haría algo así:

http://usuario:contraseñ[email protected]/dondesea/pagina.tal

Ese es el link que deberias usar en tus funciones fopen() o las que uses para "abrir" la página ...

Si usa un formaulario HTML .. edita su código . y fijate en el metodo que use de envio GET o POST y el nombre de las variabels que use (tanto del usaurio/passwor como de alguna mas tipo hidden que requiera ..). Con esas variables . .formas tu URL con tus datos de usuario/contraseña (si requiere método GET) .. si es POST se complica la cosa pero igualmente se pude hacer simulando una conexión por sockets() a esa página ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 12/05/2003 a las 21:47
  #3 (permalink)  
Antiguo 13/05/2003, 09:54
 
Fecha de Ingreso: mayo-2003
Mensajes: 115
Antigüedad: 14 años, 7 meses
Puntos: 0
Pregunta la autentificacion es por formulario

exactamente lo que quiero es atrapar el codigo de la pagina que manda a llamar el formulario por metodo post

ya edite el formulario esa parte ya quedo solo me falta capturar la pagina que manda a traer


Cluster o quien vea me podria decir como usar los sockets si me pueden mandar un ejemplo

porfavor gracias
  #4 (permalink)  
Antiguo 13/05/2003, 11:39
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Bueno .. si quieres hacer todo ese proceso .. tendras que "simular" un "servidor HTTP" via PHP para hacer tus peticiones y leer lo que te entrege todo bajo PHP...

Eso es tema completo del protolo del HTTP (en www.rfc.net lo puedes ver) ..

Un ejemplo completo
http://www.faqts.com/knowledge_base/...d/12039/fid/51

Ahí veras que se envian datos via el protocolo HTTP al servidor/puerto/página -> variables que indiques y se lee lo que devuelve al ejecutarla ...

Sólo te quedaría filtrar el resultado que obtienes para quedarte con lo que te interese ...

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 13/05/2003, 15:05
 
Fecha de Ingreso: mayo-2003
Mensajes: 115
Antigüedad: 14 años, 7 meses
Puntos: 0
Probe y me marca un error a ver si me pueden ayudar

cluster el ejemplo lque me diste en
http://www.faqts.com/knowledge_base/...d/12039/fid/51

ya lo probe y me marca un error mira

mi codigo de mi script es este

que en si es la funcion del enlace
Código PHP:
<?
function sendToHost($host,$method,$path,$data,$useragent=0)
{
    
// Supply a default method of GET if the one passed was empty
    
if (empty($method))
        
$method 'GET';
    
$method strtoupper($method);
    
$fp fsockopen($host,80);
    if (
$method == 'GET')
        
$path .= '?' $data;
    
fputs($fp"$method $path HTTP/1.1\r\n");
    
fputs($fp"Host: $host\r\n");
    
fputs($fp"Content-type: application/x-www-form-
urlencoded\r\n"
);
    
fputs($fp"Content-length: " strlen($data) . "\r\n");
    if (
$useragent)
        
fputs($fp"User-Agent: MSIE\r\n");
    
fputs($fp"Connection: close\r\n\r\n");
    if (
$method == 'POST')
        
fputs($fp$data);

    while (!
feof($fp))
        
$buf .= fgets($fp,128);
    
fclose($fp);
    
    return 
$buf;
}
?>
<html>
<head>
<title>prueba</title>
</head>
<body>
<?
//$buffer=sendToHost('www.google.com.mx','get','/search','q=pillo');
$buffer=sendToHost('www.example.com','post','/some_script.cgi','param=First+Param&s

econd=Second+param'
);
echo 
$buffer;
?>
</body>
</html>

------------------------------------

cuando ejecuto el script me sale lo sig:

--------------------------------------------
HTTP/1.1 400 Bad Request Date: Tue, 13 May 2003 20:20:09 GMT Server: Apache/1.3.27 (Unix) (Red-Hat/Linux) Connection: close Transfer-Encoding: chunked Content-Type: text/html; charset=iso-8859-1 16e
Bad Request
Your browser sent a request that this server could not understand.

Request header field is missing colon separator.

urlencoded

Apache/1.3.27 Server at www.example.com Port 80
0



-----------------------------------------
Yo pienso que el error esta en la linea:
---------------------------------
Código PHP:
    fputs($fp"Content-type: application/x-www-form-
urlencoded\r\n"
); 
ya probe con el ejemplo de google y tambien me marca request ilegal

que sera
  #6 (permalink)  
Antiguo 13/05/2003, 15:27
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Creo que es necesario que pases POST en mayusculas. Si no me equivoco == es case-sensitive.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #7 (permalink)  
Antiguo 13/05/2003, 17:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Por mi parte mas del tema no sé ... Lo que es PHP ya hace su trabajo (abrir el socket/enviarle dtos y leer la respuesta) .. Todo lo demas es cosa del protocolo HTTP (en www.rfc.net ) lo puedes ver ..

Pruena con estas cabeceras:
Código PHP:
<?
$host 
"www.google.com";
$pagina"/search";
$data urlencode("q=php");

// abrir el socket .. (en este caso al puerto 80 ..)
$fp fsockopen ($host80$errno$errstr30);

if (!
$fp) {
   echo 
"$errstr ($errno)<br>\n";
} else {
   
//concectar y enviar datos
   
fputs ($fp"GET $pagina HTTP/1.0\r\n");
   
fputs($fp"Host: $host\r\n");
   
fputs($fp"Accept-Language: es\r\n");
   
//fputs($fp, "Accept-Encoding: gzip, deflate\r\n");
   
fputs($fp"Accept: */*\r\n");
   
fputs($fp"User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)\r\n");
   
fputs($fp"Connection: Keep-Alive\r\n");
   
fputs($fp"Content-type: application/x-www-form-urlencoded\r\n");
   
fputs($fp"Content-length: " strlen($data) . "\r\n\r\n");
   
fputs($fp$data."\n");
   
   
// leer lo que entregue la conexión
   
while (!feof($fp)) {
       echo 
fgets ($fp,128);
   }
   
fclose ($fp);

}

?>
Por lo menos conecta con la página que indiques .. Mas detalles o problemas con eso deberías de leer acerca del protocolo HTTP ( yo se un poco de "odidas" pero no más ..)

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 15/05/2003, 03:58
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Tambien podiras usar la extension cURL (si la tienes instalada) http://www.php.net/manual/es/ref.curl.php . O el paquete de PEAR HTTP_request http://pear.php.net/package-info.php?pacid=33 . O la clase que comenta Luis Argerich en su columna en www.zonaphp.com , exactamente Snoopy en http://zonaphp.com/index.php?modulo=...id=12&pagina=5 .

Espero haber sido de ayuda.

PD: Por supuesto, esto es si necesitas hacerlo, no si quieres aprender a hacerlo.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
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:28.