2009-11-13 8 views
5

que tienen el código:¿Cómo descargo un archivo con WWW :: Mechanize después de enviar un formulario?

#!/usr/bin/perl 
use strict; 
use WWW::Mechanize; 

my $url = 'http://divxsubtitles.net/page_subtitleinformation.php?ID=111292'; 
my $m = WWW::Mechanize->new(autocheck => 1); 
$m->get($url); 
$m->form_number(2); 
$m->click(); 
my $response = $m->res(); 
print $m->response->headers->as_string; 

Se somete el botón de descarga en la página, pero no estoy seguro de cómo descargar el archivo que se envía de vuelta después de la POST.

Estoy queriendo una forma de descargar esto con wget si es posible. Estaba pensando que su puede ser una URL secreta pasado o algo así? ¿O tendré que descargarlo con LWP directamente desde la secuencia de respuesta?

Entonces, ¿cómo descargo el archivo que está en ese encabezado?

Gracias,

Cody Goodman

Respuesta

0

Bueno lo que me quitó el más fue el "mechanize-> form_number" subrutina comienza en 1, mientras que los programas típicos comienzan su índice a 0. Si alguien quiere saber cómo cabeceras de respuesta descarga, o descargar el archivo adjunto del encabezado s, esta es la manera de hacerlo.

Ahora aquí está el código completo para hacer lo que yo quería.

#!/usr/bin/perl 
use strict; 
use WWW::Mechanize; 

my $url = 'http://divxsubtitles.net/page_subtitleinformation.php?ID=111292'; 
my $m = WWW::Mechanize->new(autocheck => 1); 
$m->get($url); 
$m->form_number(2); 
$m->click(); 
my $response = $m->res(); 
my $filename = $response->filename; 

if (! open (FOUT, ">$filename")) { 
    die("Could not create file: $!"); 
} 
print(FOUT $m->response->content()); 
close(FOUT); 
+0

cuando lo usé para descargar un archivo pdf de 6 páginas, lo hizo, pero el contenido estaba vacío ¿Alguna idea? Qué salió mal. – msinfo

+0

¡oh! $ mech-> save_content ($ filename, binmode => ': raw', decoded_by_headers => 1); esto me ayudó – msinfo

1

que intentó su código y devuelve una pila de HTML de los cuales los únicos http:// referencias fueron:

 
    http://www.w3c.org 
    http://ad.z5x.net 
    http://divxsubtitles.net 
    http://feeds2read.net 
    http://ad.z5x.net 
    http://www.google-analytics.com 
    http://cls.assoc-amazon.com 
utilizando el código


    my $content = $m->response->content(); 
    while ($content =~ m{(http://[^/\" \t\n\r]+)}g) { 
     print("$1\n"); 
    } 

Así que mis comentarios para usted es:
1. agregue use strict; a su código, está programando para el fracaso si no lo hace
2. Lea el HTML de salida y determine qué hacer a continuación, no lo ha hecho y, por lo tanto, ha hecho una pregunta incompleta. A menos que usted identifique la URL que desea descargar, le está pidiendo a otra persona que escriba un programa para usted.

Una vez que haya identificado la URL que desea descargar, es una simple cuestión de obtenerla y luego escribir el contenido de la respuesta en un archivo. p.ej.


if (! open(FOUT, ">output.bin")) { 
    die("Could not create file: $!"); 
} 
binmode(FOUT); # required for Windows 
print(FOUT $m->response->content()); 
close(FOUT); 
+0

La url no contiene la información para descargar el archivo. El archivo está en los encabezados como un archivo adjunto de descarga – Codygman

+0

. Sospecho que puede estar confundido acerca de HTTP ... ningún archivo está incrustado mágicamente en los encabezados.Es posible que se haya devuelto una redirección en los encabezados, en cuyo caso debe imprimir los encabezados y extraer la URL del archivo para descargar. –

+0

Bien PP, realmente necesito pasar a leer el RFC para http y creo que es su derecho. Pensé que el "enlace de encabezado" significaba que estaba incrustado en los encabezados. Voy a continuar y leer los encabezados y ver si puedo encontrar el redireccionamiento. ¡Gracias por tu ayuda! – Codygman

3

Después de enviar el formulario, puede utilizar:

$ nismo> save_content ($ archivo)

vuelca el contenido de $ nismo> contenido en $ archivo. $ filename será sobrescrito. Muere si hay algún error.

Si el tipo de contenido no comienza con "text /", entonces el contenido es guardado en modo binario.

Fuente: http://metacpan.org/pod/WWW::Mechanize

+0

Gracias por esta respuesta. Aunque estaba mirando directamente a la página de CPAN, me perdí esto y tuve que pasar por muchos malos resultados de Google hasta que encontré el tuyo. –

Cuestiones relacionadas