Foros del Web » Programación para mayores de 30 ;) » Programación General »

¿Como se descarga un archivo a través de un CGI?

Estas en el tema de ¿Como se descarga un archivo a través de un CGI? en el foro de Programación General en Foros del Web. Hola a todos! Soy muy nuevo en esto de Perl, he estado buscando por toda la red y no he encontrado nada sobre una instruccion, ...
  #1 (permalink)  
Antiguo 15/01/2004, 21:35
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Pregunta ¿Como se descarga un archivo a través de un CGI?

Hola a todos!

Soy muy nuevo en esto de Perl, he estado buscando por toda la
red y no he encontrado nada sobre una instruccion, función o
comando para descargar un archivo a través de un CGI.

¿Alguien me podría echar un cable?

Gracias de antemano

Salu2

Rubén
  #2 (permalink)  
Antiguo 16/01/2004, 12:26
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 3 meses
Puntos: 90
a que te referis??????

a que te referis con bajar un archivo...a hacer un download??????

si es eso te cuento que el cartel de download para bajar archivos de una página aparece automáticamente cuando haces un hipervínculo a un archivo que el navegador no puede interpretar...como un .zip entonces, al no poder abrirlo, te da la opción de bajarlo a tu disco rígido.

Era eso lo que estabas preguntando????

Un abrazo
MonoSwim
__________________
Esteban Quintana
  #3 (permalink)  
Antiguo 16/01/2004, 12:59
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Pregunta Es complicado de explicar

Hola Monoswim!!

Muchas gracias por tu interés. Sí, me refiero a eso pero no me funciona

El tema es que la descarga se realiza a través de un CGI que pide un
usuario y una contraseña, entonces, al pinchar en el hipervínculo, se agrega la Url
del archivo a descargar a la del CGI y
claro, dice que no está disponible para abrir el archivo /www/htdocs/dominio/cgi-bin/mrep/members_only/descargas/descargas/archivos/archivo.zip.pl
La cuestion es que se hace todo a través de un montón de scripts y creo que habría que hacer
otro .pl para la descarga pero el problema es que no se como hacerlo.

Parece muy misterioso pero no lo es tanto, lo que ocurre es que la gente del grupo no quiere que sus cosas
estén a la vista de todo el mundo y yo de paso (con mucha ayuda ) voy aprendiendo algo de Perl

Espero que me puedas ayudar, porque estoy muy perdido

Muchas gracias de antemano

Un abrazo

Rubén
  #4 (permalink)  
Antiguo 16/01/2004, 13:36
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 3 meses
Puntos: 90
puede que sea...

mira, por lo que veo has llamado mal al archivo, si es nombredearchivo.zip.pl el servidor va a pensar que es un script y va a tratar de executarlo, pero si adentro tiene un zip te tirará un error...pienso que eso puede ser solucionado llamando al arhivo silamente.zip pero ahí tienes que ver bien los permisos para que no sea accesible por todos los internautas que pongan la url del archivo .zip

Lo que puedes hacer es que la verdadera url del archivo esté en una base de datos, o en una variable del script, entonces haes que el usuario en ves ver la url del archivo ve la url de una función específica como ser: www.dominio.com/script.pl?funcion=si

y esa funcion llama al verdadero url si solo si es un usuario registrado

MonoSwim
__________________
Esteban Quintana
  #5 (permalink)  
Antiguo 16/01/2004, 14:14
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
¿Y cómo ....

Gracias Monoswim!!

El problema es que, como decía al principio, soy muy nuevo en esto de Perl y no se como hacer la función dentro del script para llamar al archivo. El .pl lo pone el propio script creo que con esta función:

if (exists $query{'action'}) {

if ($MODULE eq 'main') {
$success = chdir "$cgidir/members_only";
if ($success == 0) { &error(3009, __LINE__, __FILE__, "$cgidir/members_only"); }
$reqfile = "$cgidir/members_only/$query{'action'}.pl";
} else {
$success = chdir "$cgidir/modules/$MODULE/bin/members_only";
if ($success == 0) { &error(3009, __LINE__, __FILE__, "$cgidir/modules/$MODULE/bin/members_only"); }
$reqfile = "$cgidir/modules/$MODULE/bin/members_only/$query{'action'}.pl";
}

eval { require $reqfile; };
if ($@) { &error(601, __LINE__, __FILE__, $reqfile, $@); }

} else {

## Print the correct page
&marea_print_page($user, 'page');

}


Tengo que decir que es un script de replicación de páginas (gratuito, claro) y usa un montón de scripts cgi y pl y el problema es que si le quito el .pl a la función, no funciona con el resto de las llamadas, creo que, como tu dices, lo mejor sería hacer una función dentro del script que llame al archivo (que no se cómo hacer) pero también tengo que tener en cuenta que son varios archivos, entonces ¿tendría que hacer una función por cada archivo o hay una forma de incluir una variable que sea sustituida por el nombre de cada archivo?

A lo mejor es abusar pero ¿podrías decirme cómo hacer esa función dentro del script?

Muchas gracias

Un abrazo

Rubén
  #6 (permalink)  
Antiguo 19/01/2004, 14:30
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 3 meses
Puntos: 90
a ver...

para crear una función dentro de un script simplemente tienes que declararla con la palabra sub. paniendo todo el contenido de la función entre corchetes

sub nombre_de_funcion {
print "esta es mi primer función";
return ('1');
}

entonces desde el script puedes llamar una o las veces que quieras a tu función poniendo:

&nombre_de_funcion();
ó
$hola = &nombre_de_funcion();

así guardas en la variable "hola" el valor que retorne la función, que en este casoes 1.

Por lo que veo estás usando scripts de otros...mmm...yo te digo por experiencia propia que te rrecomiendo enormemente hacer tus propios scripts, ya que aprendés un montón y además te da más livertad para hacer lo que quieras...Cambiar un script de otra persona no es nada facil.

Espero que te sirva

MonoSwim
__________________
Esteban Quintana
  #7 (permalink)  
Antiguo 19/01/2004, 15:15
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Pregunta ¿sería algo así?

Hola de nuevo Monoswim!!

Muchas gracias por toda tu paciencia .

El no hacer mis propios scripts (que ya me gustaría) es únicamente porque aún no he conseguido encontrar lo más básico sobre programación en Perl, tengo varios tutoriales, incluso alguno lo he imprimido para poder consultarlo, pero en ningún sitio he encontrado qué funciones hay y para que sirve cada una (me refiero en español, claro). Si sabes dónde lo podría conseguir sería todo un lujo que me lo pudieras decir

Y sobre la función, ¿sería algo así?:

sub. descargas {

return(http://www.dominio.com/....../archivo.exe);
}


Y luego la podría llamar así:

$descarga=&descargas();


La cuestión es, si es que está bien así, claro ¿como la llamo desde la web? ¿sería algo así: http://www.dominio.com/pp/members_only/archivo.cgi?descarga?

Soy un poco pesado, pero es uno de los inconvenientes de ser novato .

Espero que puedas seguir echándome un cable.

Muchas gracias

Un abrazo

Rubén
  #8 (permalink)  
Antiguo 21/01/2004, 15:49
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 3 meses
Puntos: 90
algo así

tienes unos pequeños erroes...la gunción no está devolviendote ningun valor...razón por la cual la puedes llamar simplemente así:

&descargas(http://www.sdfs.com/skdjf.exe);

return es una función que le devuelve un valor pero al mismo programa de perl, no es que se lo devuelve al navegador!!!

la función descargas debe ser así:

sub descargas {
print "Location: $_[0]\n\n";
}


lo que hace es largar por salida la url que le mandaste (http://www.sdfs.com/skdjf.exe)

para llamar a la función desde tu página hace el link:

http://www.dominio.com/pp/members_on...ction=descarga

en el script tras traer los datos pasados por parámetros haces

if (form{'action'} eq 'descarga'){
&descargas(http://www.sdfs.com/skdjf.exe);
}

entendés como funciona....Si lo que pide es descargar, que valla a la función descargas.

Espero que te sirva

Te recomiendo el libro PERL y CGI de Elizabeth Castro (editorial prentice hall) yo lo leí cuando era principiante y me ayudó mucho!!!

MonoSwim
__________________
Esteban Quintana
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 15:44.