2011-01-12 17 views
27

Estoy ejecutando Perl en Windows XP, y necesito descargar un archivo de la URL http://marinetraffic2.aegean.gr/ais/getkml.aspx.¿Cómo descargo un archivo usando Perl?

¿Cómo debo hacer esto? Intenté usar WWW :: Mechanize, pero no puedo entenderlo.

Este es el código que utilicé:

my $url = 'marinetraffic2.aegean.gr/ais/getkml.aspx'; 
my $mech = WWW::Mechanize->new; 
$mech->get($url); 
+0

¿Puede usted por favor publicar algo de código para mostrar lo que se trató con WWW :: Mecanizar e indique lo dejase' t trabajo como se esperaba? – DVK

+0

BTW, veo la página vacía en esa URL – DVK

+0

Este es el código que utilicé: my $ url = 'http://marinetraffic2.aegean.gr/ais/getkml.aspx'; my $ mech = WWW :: Mechanize-> new; $ mech-> get ($ url); Sí, en realidad es una página vacía que debería descargar un archivo .kmz. Tienes que ser persistente porque algunas veces no se descarga. – Sfairas

Respuesta

56

que haría uso de LWP::Simple para esto.

#!/usr/bin/perl 

use strict; 
use warnings; 

use LWP::Simple; 

my $url = 'http://marinetraffic2.aegean.gr/ais/getkml.aspx'; 
my $file = 'data.kml'; 

getstore($url, $file); 
+0

Probé tanto LWP simple como WWW mecanize pero me está fallando la lectura de estado: restablecimiento de conexión por pares. Url - http://27.251.47.106/BLal/Design/OPD/LabReport_Interface.aspx?TestID=LSHHI472&PID=LSHHI643736&LedgerTransactionNo=371411000582 – Gaurav

+0

Probablemente sea mejor plantear esto como una nueva pregunta. –

4

Si descargar ese archivo es todo lo que realmente hace, será mejor que vaya con la respuesta de @davorg.

Si esto es parte de un proceso más grande, tiene acceso al recurso que descargó como una cadena utilizando el método content en su objeto $mech.

4
use WWW::Mechanize; 

my $url = 'marinetraffic2.aegean.gr/ais/getkml.aspx'; 
my $local_file_name = 'getkml.aspx'; 

my $mech = WWW::Mechanize->new; 

$mech->get($url, ":content_file" => $local_file_name); 

Esto de hecho se ajusta al LWP::UserAgent->get. Más detalles aquí: http://search.cpan.org/dist/WWW-Mechanize/lib/WWW/Mechanize.pm# $ nismo> get ($ uri )

16

Solía ​​File::Fetch ya que esto es un módulo Perl núcleo (que no necesitaba para instalar cualquier paquete adicional) y a tratar un número de diferentes formas de descargar un archivo según lo que esté instalado en el sistema.

use File::Fetch; 
my $url = 'http://www.example.com/file.txt'; 
my $ff = File::Fetch->new(uri => $url); 
my $file = $ff->fetch() or die $ff->error; 

Tenga en cuenta que este módulo será, de hecho, tratar de utilizar LWP primero si está instalado ...

Cuestiones relacionadas