Newsgroup: it.comp.lang.perl
Titolo: Problema con socket

Salve,
   Ho un problema con questo script che dovrebbe prendere una richiesta 
da web browser, e inoltrarla al server .. tipo proxy insomma.
Il browser è impostato per utilizzare il servizio proxy a 
127.0.0.1:81
Richiedo la prima pagina, ma poi si impalla tutto!
Sto su MacOS9 con MacPerl5 (Non credo che sia un problema di 
piasttaforma ato che col mac i socket etc.. hanno sempre funzionato!)
Ecco il codice:
#!/usr/bin/perl
use strict;
use warnings;
use Socket qw(:DEFAULT :crlf);
use IO::Socket::INET;
use URI;
local $SIG{NUM13} = 'IGNORE'; # Only for mac os 9
my ($socket, $client, $request, $get, %header, $url, $content, $method, 
$hostAddr, $httpVer, $uri, $socket_B, $answer);
CONNECT: {
   $socket = IO::Socket::INET->new(LocalPort => '81',
                                     Proto => 'tcp',
                                      Type      => SOCK_STREAM,
                                       Reuse     => 1,
                                       Listen    => 1) || sleep 30 && 
goto CONNECT;
 
}
$socket->listen();
sleep 1;
print "Listening ...\n\n";
# // MAIN...
#
#
while (1)
{
   $client = $socket->accept;
 
   if ($client)
   {
      $client->autoflush(1);
      recv($client, $request, 10000, 0);
 
      ($get, undef) = &GET_REQUEST( $request );
      ($method, $hostAddr, $httpVer) = $get =~ /^(\w+) +(\S+) +(\S+)/;
 
      $uri = URI->new( $hostAddr );
 
      $socket_B = IO::Socket::INET->new(PeerAddr => $uri->host,
                                 PeerPort => $uri->port,
                                    Proto => 'tcp') || die "$!\n";
 
      $socket_B->autoflush(1);
 
      syswrite $socket_B, $request;
 
      open(MEMO, ">cache.txt");
      while ( $answer = <$socket_B> )
      {
         syswrite $client, $answer;
         print MEMO $answer;
      }
      close(MEMO);
 
      close $socket_B;
 
      close $client;
   }
 
}
END 
{
   print "\nGoodbye!\n";
}
sub GET_REQUEST {
   my $request = shift;
   my @header = split("\n",$request);
   my $header_num = (scalar(@header) - 1);
   my (%header,$header,$key,$value);
 
   my $get = $header[0];
   chomp($get);
 
   for my $num (1 .. $header_num)
   {
      next if ($header[$num] !~ m/:/);
      $header = $header[$num];
      chomp($header);
      ($key,$value) = split(": ",$header,2);
      $key =~ s/\r//;
      $header{$key} = $value;
   }
   return ($get,%header);
}

       recv($client, $request, 10000, 0);
e magari come posso sostituire quel 10000 con una variabile che mi dice 
quanto è lunga la stringa che si andrà a leggere?
grazie

Devo dire che il mio script sembra funzionare. Ma veniamo al dunque .. 
alla vera domanda. Quando faccio girare il codice nel mio primo post e 
mi collego ad 
hotmail.com
 al dopo aver inserito user e pass e aver 
premuto "Sign-in" lo script va in errore in questo modo:
Listening ...
CONNECT 
loginnet.passport.com:443
 HTTP/1.0[cr]
Connection: Keep-Alive[cr]
Proxy-Connection: Keep-Alive[cr]
User-Agent: Mozilla/4.0 (compatible; MSIE 5.17; Mac_PowerPC)[cr]
Extension: Security/Remote-Passphrase[cr]
[cr]
[cr]
# Can't locate object method "host" via package "URI::_foreign" (perhaps 
you forgot to load "URI::_foreign"?). File 'Macintosh 
HD:Utenti:Claudio:Desktop Folder:
socket.pl
'; Line 49
Goodbye!
Ho anche provato a caricare la libreria URI::_foreign ma lo script esce 
con lo stesso errore ...
da cosa pensate possa dipendere?
grazie!

perchè nessuno mi risponde? e roba troppo difficile?
;-(

 perchč nessuno mi risponde? e roba troppo difficile?
Ho provato su windows e mi funziona bene. Evidentemente ci sono dei
problemi (di Perl?) su piattaforme MacOS 9. Non saprei come aiutarti non
avendo un Mac.

 wrote:

quindi sei riuscito a loggarti a hotmail col mio script?
grazie

 quindi sei riuscito a loggarti a hotmail col mio script?
Io l'ho usato come proxy come hai detto, il browser naviga correttamente
e correttamente viene scritto il file cache.txt
Hai scritto:
<<Richiedo la prima pagina, ma poi si impalla tutto!>>
invece, nel mio caso, ho effettuato una normale navigazione qua e là
(non ho un account hotmail e non ho effettuato login).

 wrote:

cmq ho capito che forse il problema è di https
ciao