2009-06-22 2 views
5

Vorrei scrivere uno script per accedere a un'applicazione web e poi spostarsi in altre parti dell'applicazione:Come utilizzare LWP di Perl per accedere a un'applicazione Web?

use HTTP::Request::Common qw(POST); 
use LWP::UserAgent; 
use Data::Dumper; 

$ua = LWP::UserAgent->new(keep_alive=>1); 

my $req = POST "http://example.com:5002/index.php", 
[ user_name  => 'username', 
    user_password => "password", 
    module  => 'Users', 
    action  => 'Authenticate', 
    return_module => 'Users', 
    return_action => 'Login', 
]; 

my $res = $ua->request($req); 
print Dumper(\$res); 
if ($res->is_success) { 
    print $res->as_string; 
} 

Quando provo questo codice io non sono in grado di accedere all'applicazione. Il codice di stato HTTP restituito è 302 trovato ma senza dati.

Se inserisco nome utente/password con tutte le informazioni richieste, è necessario restituire la home page dell'applicazione e mantenere la connessione attiva per spostare altre parti dell'applicazione.

risposta

15

Si può essere in grado di utilizzare WWW::Mechanize per questo scopo:

Mech supporta l'esecuzione di una sequenza di pagina recupera compresi seguente link e segui le forme. Ogni pagina recuperata viene analizzata e vengono estratti i suoi collegamenti e moduli. È possibile selezionare un collegamento o un modulo, i campi modulo possono essere compilati e la pagina successiva può essere recuperata. Mech memorizza anche una cronologia degli URL che hai visitato, che possono essere interrogati e rivisitati.

9

Sto indovinando che LWP non segue il reindirizzamento:

push @{ $ua->requests_redirectable }, 'POST'; 

Qual è il motivo per cui non lo si utilizza WWW::Mechanize?

1

Ho usato LWP per accedere a molti siti Web e fare cose con il contenuto, quindi non ci dovrebbero essere problemi a fare quello che vuoi. Il tuo codice sembra buono finora, ma due cose mi piacerebbe suggerire: cookie_jar $ UA> ({:

  1. Come accennato, potrebbe essere necessario effettuare le richieste redirectable
  2. Potrebbe anche essere necessario abilitare i cookie });

Spero che questo aiuti