Newsgroup: it.comp.lang.perl
Titolo: LWP, qualcuno lo usa?

Per i miei *loschi* scopi ho forse trovato utile il modulo LWP, in
particolare l'operazione POST.
Su perldoc c'è questo esempio
  use LWP::UserAgent;
  $ua = LWP::UserAgent->new;
  my $req = HTTP::Request->new(POST =>
'
http://www.perl.com/cgi-bin/BugGlimpse'
);
  $req->content_type('application/x-www-form-urlencoded');
  $req->content('match=www&errors=0');
  my $res = $ua->request($req);
  print $res->as_string;
Per quello che ho da fare, usando un browser si compila un form dove si fa
l'upload del file (questo viene processato e poi passato al programma
nph-mascot.exe), quando si da l'ok per accettare il form si viene mandati a
http://mascot.jmol.it/mascot/cgi/nph-mascot.exe?1
quindi "
http://mascot.jmol.it/mascot/cgi/
" è il valore che dovrei mettere in
my $req = HTTP::Request->new(POST => ''); giusto?
Il programma funziona anche in locale e dalla shell la linea di comando che
dovrei dare è:
/usr/local/mascot/cgi/nph-mascot.exe 1 -commandline < /path/to/myfile
la domanda è: come faccio a passare questo comando con i tre argomenti in
$req->content_type()? L'opzione "-commandline" mi è essenziale per evitare
che i risultati vadano a STDOUT, il file "myfile" è già processato e pronto
ad essere elaborato da nph-mascot.exe e sta su un filesystem già montato sul
server.
Grazie a chi vorrà aiutarmi (è per la ricerca sul cancro, dai!)
dawe
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 $req->content_type()? 
Sul content-type? Passali sul content, come hai fatto per match e 
errors, ad esempio:
$req->content('match=www&errors=0&commandpath=blabla&option=bla&filepath=altrobla');
Spero di avere capito la tua domanda.

 che i risultati vadano a STDOUT,
Tanto per cominciare là non ci sono TRE argomenti, ce ne sono DUE. Il segno 
'<' è parte della sintassi compresa dall'interprete dei comandi (shell) e 
determina un particolare effetto nell'esecuzione del comando: il file 
specificato viene aperto e il file descriptor relativo viene impostato come 
stdin del processo figlio. 
Ora, qui abbiamo un programma che evidentemente è stato concepito sia per 
essere eseguito in una shell che per per essere eseguito da un web server 
in un ambiente CGI. L'argomento "-commandline" serve *presumibilmente* per 
segnalare al programma che è stato invocato in una shell.
A noi, però, non interessa come si comporta il programma quando è eseguito 
da riga di comando, perché quello che ci serve è sapere come utilizzarlo 
tramite lo strato CGI del web server. Giusto?
Se, come hai detto, il file può essere inviato dal browser tramite un form, 
quello che devi fare è riprodurre il comportamente del browser tramite LWP.
Questo significa in sostanza eseguire una richiesta POST il cui 
content-type sia "multipart/form-data" e il cui body comprenda (tra le 
altre cose previste dal formato) il contenuto del file in questione.
LWP ti offre tutti gli strumenti necessari. Per prima cosa ti leggerai 
questi due documenti:
   perldoc LWP::UserAgent
   perldoc HTTP::Request::Common
Poi ti studierai il form citato, allo scopo di indentificare con precisione 
quali sono gli argomenti che il programma si aspetta di ricevere dal client.
Quindi costruirai la richiesta POST come spiegato in quei due docuementi. 
(In particolare devi guardare la sezione di HTTP::Request::Common in cui si 
menziona l'RFC 1867.)
Max

 si menziona l'RFC 1867.)
Lunedì mi do da fare. Grazie
-- 
per rispondere via e-mail, togli LE_MANI_DALLA_TASTIERA

 Ottimo. Prova a dare un'occhiata anche a WWW:Mechanize
Lo farň.
Nel frattempo avevo trovato una soluzione provvisoria che usava il modulo
SSH per activeperl. Funziona anche se non saprei valutare la effettiva
performance rispetto ai metodi da te (e da Max M.) suggeriti.
Ciao e grazie
dawe


 forse per altre cose, ci lavorerò!
Quasi tutto quello che fa un browser può essere riprodotto con LWP, 
compresa la gestione dei cookie. (Ovviamente LWP non può eseguire codice 
javascript, o robe del genere.)
Ad ogni modo, dall'altro tuo messaggio mi pare di capire che tu abbia 
accesso SSH all'host e possa eseguire il programma in una shell. Non 
capisco perché non ti piaccia questa soluzione, che è quella più logica.
Max

 capisco perché non ti piaccia questa soluzione, che č quella piů logica.
Mi sembrava poco elegante (non saprei perchč) e poi era una occasione per
imparare qualcosa di nuovo. 
Ciao
dawe
