Как лучше (желательно без модулей)
направить запрос и корректно все получить
У меня проблема с нахождением начала запрашиваемой картинки
"GET /1.gif HTTP/1.0"
Точнее первий раз я все хорошо получаю (и распознаю) а последующие
рази что-то не так - может надо закривать поток или еще что...
Вот взгляните на ето:
------------------------------ CUT -------------------------------------
sub HTTPQuery()
{
# Ето все с соответствующей библиотеки!!!
my $socket=IO::Socket::INET->new(
PeerAddr => (defined $_[0] ? $_[0] : ""),
PeerPort => (defined $_[1] ? $_[1] : "80"),
Proto => "tcp",
Type => SOCK_STREAM,
Timeout => $cfg_param{$HTTP_TIMEOUT}) || return "";
$socket->print($_[2]." ".$_[3]." HTTP/".$_[4]."\n\n");
return \$socket;
}
sub GetBanner()
{
print "Content-type: text/html\n\n";
my $a2="";
my $a3="";
if ($_[0] =~ /^(?:http:\/\/)?([^:\/\\]*)(?::(\d+))?(\/?[^\\]*)$/)
{
if (($fh=${&HTTPQuery($1,$2,"GET",$3,"1.0")}) eq "")
{ return 1; }
while (<$fh>)
{ $a2.=$_;
if ($_ =~ m/^[Cc]ontent-[Ll]ength:[\ ]*(\d+)/)
{ ${$_[1]}[0]=$1; }
if (($_ =~ m/^GIF8[7,9]a/) || ($_ =~ m/^\xFF\xD8/))
{ $q1=1;
}
if ($q1)
{ $a3.=$_; }
}
$fh2=IO::File->new_tmpfile || return 1;
$fh2->autoflush(1);
print $fh2 $a3;
(${$_[1]}[2], ${$_[1]}[3], ${$_[1]}[4]) = &imgsize($fh2);
# imgsize() - FROM LIBRARY - Работает отлично!!!
seek($fh2,0,0);
${$_[1]}[1] = crc32(*$fh2);
close($fh);
return 0;
}
else
{
return 1; #Error
}
}
# MAIN PROGRAM
@fs=('http://192.168.11.4/real.gif','http://192.168.11.4/1.gif','http://192.168.11.4/3.gif');
print "Content-type: text/html\n\n";
foreach $i (@fs)
{
print "Result: [".&GetBanner($i,\@a1)."]\n";
print"Data:[".$a1[0]."-".$a1[1]."-".$a1[2]."-".$a1[3]."-".$a1[4]."]<br>\n";
}
exit 0;
# а вот результати работи :
# Content-type: text/html Result: [0] Data: [4548 - 1291864271 - 42 - 37 # - JPG]
# Content-type: text/html Result: [0] Data: [267 - 2972524420 - - - Data # stream is not a known image file format]
# Content-type: text/html Result: [0] Data: [293 - 2778158077 - - -
# Datas tream is not a known image file format]
буду благодарен за подсказку.