Newsgroup: it.comp.lang.perl
Titolo: QUALCUNO PUO? AIUTARMI PERFAVORE!???

Ciao tutti,
    ho un grosso problema e non so come uscirne. Sarei veramente grato se
qualcuno raccogliesse questa "sfida" e mi desse una mano.
    Il problema e' il seguente: devo scaricarmi una pagina usando il modulo
LWP (l'URL di richiesta cambia ogni volta) il cui indirizzo potrebbe essere
il seguente:
http://service.bfast.com/bfast/click?bfmid=1921220&siteid=35414878&bfpid=086
162036941&bfmtype=movies Se provate con IE o Netscape potrete accorgervi (e
forse e' una concausa del problema) che prima di ottenere la pagina di
risposta ci saranno DUE redirect. Ad ogni modo col browser funziona.
    Invece usando il metodo GET in Perl:
         use LWP::UserAgent;
         my($interfaccia) = new LWP::UserAgent;
         my($richiesta);
         $interfaccia->agent('Mozilla/5.0');
         $interfaccia->timeout(30);
          $richiesta=HTTP::Request-> new(GET =>
'
http://service.bfast.com/bfast/click?bfmid=1921220&siteid=35414878&bfpid=08
6162036941
&bfmtype=movies' );
        $richiesta->content_type('application/x-www-form-urlencoded');
          $risultato = $interfaccia->request($richiesta);
          $temp = $risultato->as_string;
          print $temp;
(magari ho copiato male o scordato qualche ricga ma il codice e' giusto
funziona con altri URL!) si ottiene un MESSAGGIO di errore dal server di
questo tipo (e' la stampa degli header di intestazione):
HTTP/1.1 200 OKCache-Control: no-cacheConnection: Keep-AliveDate: Thu, 16
Nov 2000 12:23:29 GMTPragma: no-cachePragma: no-cacheServer:
Microsoft-IIS/5.0Content-Length: 19386Content-Type: text/htmlContent-Type:
text/html; charset=windows-1252Expires: Thu, 01 Dec 1994 16:00:00
GMTExpires: Wed, 11 Aug 1999 07:00:00 GMTExpires: 0Client-Date: Thu, 16 Nov
2000 12:23:30 GMTClient-Peer: 199.2.223.1:80Set-Cookie:
SITESERVER=ID=83d9b27a6d8d7e3e7e4e9f73e1540cc7; expires=Monday, 01-Jan-2035
00:00:00 GMT; path=/; domain=.800.comTitle: Incorrect Access Permission
Insomma quello che ne deduco e' che il server fa un controllo sulla cache
dei cookie e siccome il modulo Perl LWP non ha quesa funzione lo stesso non
restituisce al server remoto la risposta sui cookies ricevuti.
    Qualcuno sa come risolvere questo problema????
    Io ho provato a lanciare due richieste: la prima per ottenere un cookie
set e la seconda che integrava tale cookie set per cercare di eviteare il
controllo sulla presenza di una cache per i cookie. L'ho fatto aggiungendo
prima del codice sopra riportato queste righe:
         use HTTP::Cookies;
         my($biscottino) = new HTTP::Cookies;
e dopo dello stesso precedente codice le
          $biscottino->add_cookie_header($richiesta);
          $risultato = $interfaccia->request($richiesta);
        $temp=$risultato->as_string.$temp;
ma non funziona!!!
    Perfavore se qualcuno sa dirmi come uscire da questo pasticcio ...
potrebbe scrivermi a 
ar...@shineline.it
 ?????
    Grazie a tutti,
        Federico Bari.

 potrebbe scrivermi a 
ar...@shineline.it
 ?????
No. Non si risponde in privato. E' contrario alla netiquette.
-- 
Maurizio M. Munafo' / 
mmmu...@netscape.net
"Consider Phlebas, who was once handsome and tall as you" (T.S.Eliot)

A tutti gli interessati,
    grazie alle segnalazini di Maurizio Munafo e di Giorgio ho risolto il
problema anche se ho dei dubbi sul nuovo codice, pur funzionante,  che ho
scritto. Se vi interessa riporto di seguito il codice, le risposte allo
stesso e le due domande alle quali spero qualcuno abbia una risposta. Grazie
comunque a tutti ed in particolare a Maurizio e Giorgio.
    Federico.
-------------------------
IL CODICE FUNZIONANTE
#!/usr/bin/perl
 use LWP::UserAgent;
 use HTTP::Cookies;
 my($interfaccia) = new LWP::UserAgent;
 my($contenitore)=HTTP::Cookies->new;
 my($richiesta);
 $interfaccia->agent('Mozilla/5.0');
 $interfaccia->timeout(30);
 $richiesta=HTTP::Request-> new('GET' =>
"
http://service.bfast.com/bfast/click?bfmid=1921220&siteid=35414878&bfpid=08
6162036941
&bfmtype=movies");
 $interfaccia->cookie_jar($contenitore);
 $risultato = $interfaccia->request($richiesta);
      $contenitore->extract_cookies($risultato);
 $temp = $risultato->as_string;
 open(fd,">risultato.html");
 print fd $temp;
 close(fd);
 print "$temp\n\n<<<\n";
 while($temp=~m/HTTP\/1.. 302|Refresh.*?URL=/gsi){
  $url=($temp=~m/location: .*?\n|URL=\/mv\/movietitle.*?"/gsi)[0];
  $url=~s/Location: |\n|"|URL=//gsi;
  print "\nurl: $url\n";
  $url='
http://www.800.com
'.$url;
  $richiesta=HTTP::Request-> new('GET' => "$url");
  $interfaccia->cookie_jar($contenitore);
  $risultato = $interfaccia->request($richiesta);
      $contenitore->extract_cookies($risultato);
  $temp = $risultato->as_string;
  open(fd,">>risultato.html");
  seek(email,0,2);
  print fd "\n<br>URL:$url\n<br>";
  print fd $temp;
  close(fd);
  print "$temp\n\n<<<\n";
 }
la prima parte della RISPOSTA e' la seguente:
HTTP/1.1 302 (Found) Moved Temporarily
Connection: close
Date: Fri, 17 Nov 2000 15:46:10 GMT
Location:
/affiliate.asp?siteid=0035414878&clickid=1389009301&s=086162036941&type=MV
Server: Microsoft-IIS/5.0
Expires: Thu, 01 Dec 1994 16:00:00 GMT
Client-Date: Fri, 17 Nov 2000 15:45:55 GMT
Client-Peer: 
199.2.223.1:80
Client-Warning: Redirect loop detected
Set-Cookie:
SITESERVER=GUID=93e3aa8776404d54dc7cf6a64d7306f7;path=/;expires=Sat,
29-Oct-2030 23:12:40 GMT; domain=.
800.com
<br>URL:
http://www.800.com/affiliate.asp?siteid=0035414878&clickid=138900930
1&s=086162036941&type=MV
<br>HTTP/1.1 200 OK
Cache-Control: no-cache
Connection: Keep-Alive
Date: Fri, 17 Nov 2000 15:46:14 GMT
Pragma: no-cache
Server: Microsoft-IIS/5.0
Content-Length: 145
Content-Type: text/html
Expires: Fri, 31 May 1996 20:30:14 GMT
Client-Date: Fri, 17 Nov 2000 15:45:59 GMT
Client-Peer: 
199.2.223.1:80
Refresh: 0; URL=/mv/movietitle.asp?p=5022753
<html>
<head>
 <meta HTTP-EQUIV="Refresh" CONTENT="0; URL=/mv/movietitle.asp?p=5022753">
</head>
<body bgcolor=#FFFFFF>
</body>
</html>
<br>URL:
http://www.800.com/mv/movietitle.asp?p=5022753
<br>HTTP/1.1 200 OK
Cache-Control: private
Connection: Keep-Alive
Date: Fri, 17 Nov 2000 15:46:16 GMT
Server: Microsoft-IIS/5.0
Content-Length: 28844
Content-Type: text/html
Content-Type: text/html; charset=iso-8859-1
Client-Date: Fri, 17 Nov 2000 15:46:09 GMT
Client-Peer: 
199.2.223.1:80
Title: 
800.COM
 Movies - Alien 3
X-Meta-CATEGORY: home page
X-Meta-DESCRIPTION: Shop online for Electronics, Movies and Music. 
800.COM
has good information, unbelievable prices and no sales tax.
X-Meta-KEYWORDS: online electronics store, electronics, movies, music, dvd,
television, vcr, home theater, speakers, receivers, webtv, 
800.COM
X-Meta-MS.LOCALE: EN-US
<html>
<head>
Le domande che vorrei porvi sono due:
1) riguardo al mio codice non mi piace il fatto di aver aggiornato l'url
dentro il ciclo while della classe richiesta con un altro NEW che mi sa
tanto di allocazione dinamica di memoria; in tal caso se al redirect
successivo il server cerca il cookie precedente mi sa che non lo trova
perche' la vecchia $richiesta con il suo cookie_jar e' stata persa. Infatti,
pur funzionando e a 'sto punto nonso perche', potete vedere alla seconda
risposta un "Cache-Control: no-cache" che lo reputavo essere fonte dei miei
problemi. QUINDI LA DOMANDA: come aggiornare l'url $richiesta che e' una
classe HTTP::request senza usare il new???
2) LA SECONDA DOMANDA e' legata alla prima: come mai c'e' una segnalazione
di "Cache-Control: no-cache" alla seconda risposta ed invece solo una
"Cache-Control: private" alla terza risposta????
    OK ciao tutti,
        Federico.