Foros del Web » Programando para Internet » PHP »

se podría hacer esto y como?

Estas en el tema de se podría hacer esto y como? en el foro de PHP en Foros del Web. a ver si me explico bien. imaginad una página web cualquiera donde para bajarse un archivo hace falta "loguearse" antes de acceder al archivo. Lo ...
  #1 (permalink)  
Antiguo 18/09/2003, 13:28
 
Fecha de Ingreso: enero-2002
Mensajes: 94
Antigüedad: 15 años, 10 meses
Puntos: 0
se podría hacer esto y como?

a ver si me explico bien.

imaginad una página web cualquiera donde para bajarse un archivo hace falta "loguearse" antes de acceder al archivo.

Lo que quiero hacer es un script en php que envie los datos de mi nombre de usuario y contraseña a esa web de forma automática para que posteriormente el mismo script enlace directamente con la descarga, para no tener que entrar en esa web e ir a descargar el archivo.

Se puede mandar mis datos a una página como si se hubiesen mandado de un formulario?

no se si me he explicado bien..

No se si conocereis la web de http://www.hattrick.org que es un juego de fútbol online y para los usuarios de pago dispone de un archivo con los datos actualizados del equipo que cada usuario maneja... y es para que se descargue y mediante programas de terceras personas poder ver las estadísticas mas o menos... algunos de esos programas ya descargan de forma automática ese archivo... y yo lo que buscaba es hacer lo mismo pero con PHP, loguearte en esa web y acceder a la descarga del archivo directamente sin formularios de por medio.


PD: sí, se puede hacer. NO es ilegal, de todas formas antes de realizarlo volveré a pedirles permiso.


como podría hacerlo... mas que nada solo es el trozo de loguearse que no tengo ni idea de como empezar
  #2 (permalink)  
Antiguo 18/09/2003, 13:49
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 ese archivo y scripts que gestinan el login y la descarga están en otro servidor al tuyo .. hazte un formulario que lleve y apunte esas variables a esa página ..osease, el "action" deberá apuntar a http://www.nose.tal .. y las variabels de "usuario" y contraseña" serán las que pida esa web ..

El resto de autentificar al usuario y demás dependerá de esa otra web .. no de la tuya.

Y si no es un formulario .. sino que recoge esos datos de login por el URL .. usa un LINK que apunte a esa web con los datos que correspondan:

http://www.nose.tal?user=pepito&pass=nose ...

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

En la pagina web el formulario es GET o POST (mira el method). Y tambien la descarga comienza automaticamente o hace una redireccion?

De todas formas, lo que vas a tener que hacer es simular el envio del formulario. Para ello tienes varias opciones:

- Usar fsockopen() (www.php.net/fsockopen) y enviar las cabeceras HTTP "a mano".

- Usar la extension de PHP cURL (www.php.net/curl), que crea unas funciones wrapper para hacer lo mismo que con el fsockopen().

- Usar una clase que imite a cURL. Snoopy (http://snoopy.sourceforge.net/) es una de ellas. Nunca he tenido que usarla, asi que no se cuan buena es.

Cualquiera de los 3 te sirve para simular un navegador.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #4 (permalink)  
Antiguo 18/09/2003, 14:06
 
Fecha de Ingreso: enero-2002
Mensajes: 94
Antigüedad: 15 años, 10 meses
Puntos: 0
gracias por responder... básicamente es eso lo que necesitaba hacer, "simular el envío del formulario"

el formulario de su web utiliza el método "post"

y por ejemplo si la dirección de autentificación es http://www.loquesea.com/autentificar.ext

y la dirección de descarga es:

http://www.loquesea.com/descargar.ext (desde esa dirección ya salta directamente la ventana de descarga del archivo...)

ahora no se si este planteamiento sería correcto:

simular el envío del formulario hacia la página de autentificación y justo después redireccionar el script hacia la url de descarga

se podría hacer esto en un solo script php utilizando el fsockopen()?

y así solamente accediendo por ejemplo a http://localhost/script.php ya directamente me aparecería la ventana de descarga del archivo
  #5 (permalink)  
Antiguo 18/09/2003, 14:15
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Con cualquiera de los metodos lo puedes hacer en un solo script. No tieen que ver nada tu navegador. Todo lo hacen esas funciones.

Quizas en este caso mejor usar cURL o Snoopy en lugar de fsockopen() directamente. Lo digo porque estos creo que manejan automaticamente las redirecciones y las cookies. Con fsockopen() tendrias que hacerlo "a mano". Y como veo que lo necesitas para hacer algo, y no para aprender, pues eso, mas facil con cURL o Snoopy. Luego si quieres aprende HTTP lo haces con fsockopen().

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #6 (permalink)  
Antiguo 18/09/2003, 17:33
 
Fecha de Ingreso: enero-2002
Mensajes: 94
Antigüedad: 15 años, 10 meses
Puntos: 0
lo estoy probando con fsockopen()

he encontrado un código navegando por el foro y lo he intentado adaptar a lo que necesito...

tengo el script (llamado prueba.php) así:

Código PHP:


// Funcion que intenta enviar una serie da valores mediante el método
// POST a un documento web en particular. Recibe, en orden: (a) el
// nombre del servidor con el que se va a realizar la conexion (p.
// ej. 'www.servidor.com', o '127.0.0.1'), (b) la ruta hacia el
// documento web al que le van a ser pasados los valores
// (p. ej. '/cgi-bin/script.cgi') y (c) una matriz asociativa con los
// valores a pasar. Las claves de esta matriz seran usadas como
// nombres de variables y los valores como valores de cada variable.

// Esta funcion podria implementar mas chequeos, pero en terminos
// generales, suele devolver TRUE cuando la informacion es enviada
// exitosamente, y FALSE de lo contrario.

function enviar_metodo_post ($servidor$ruta$matriz)
{
    
$contenido '';

    
$primer true;  // Bandera que indica si se esta procesando la
                     // primera pareja clave/valor de la matriz
                     // recibida

    
while (list ($clave$valor) = each ($matriz)) {
        if (! 
$primer)
            
$contenido .= '&';
        else 
            
$primer false;

        
$contenido .= urlencode ($clave) . '=' urlencode ($valor);
    }
    
    
$socket fsockopen ($servidor80);  // Conexion por el puerto 80

    
if (!$socket) {
        
trigger_error ('No fue posible abrir la conexion con el servidor');
        return 
false;
    }

    
// Enviar cabeceras HTTP
    
fwrite ($socket"POST $ruta HTTP/1.0\n");
    
fwrite ($socket"User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)\r\n");
    
fwrite ($socket"Content-type: application/x-www-form-urlencoded\n");
    
fwrite ($socket"Content-length: " strlen ($contenido) . "\n\n");

    
// Enviar el contenido de las variables
    
fwrite ($socket$contenido);

    
fclose ($socket);

    return 
true;
}


$variables = array ('loginname' => 'nombredeusuario''password' => 'estoeslacontrasena''action' => 'login''Submit' => 'ENTRAR');

$resultado enviar_metodo_post ('xxx.xxx.xxx.155',
                                 
'/Common/default.asp',
                                 
$variables);

header("Location: http://xxx.xxx.xxx.155/Common/hrf.asp"); 

Voy al script http://localhost/prueba.php y cuando se redirecciona a la página donde se descarga el archivo, me da un error como si no me hubiese "logueado" sin embargo, si en la misma ventana vuelvo a ejecutar el script, aparece la descarga, es decir, la segunda vez funciona...

pfff, ¿como podría arreglarlo praa que funcione a la primera?
  #7 (permalink)  
Antiguo 18/09/2003, 17:47
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Bueno, lo que yo pensaba era mas bien hacer un shellscript. En lugar de hacer la redireccion, despues de hacer el POST, hacer el GET a la otra pagina con fsockopen() y leer el fichero del socket, para luego grabarlo en disco. Es decir, sin que tu navegador haga nada.

Suerte.
__________________
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 01:03.