>> А wget'ом категорически "низя"?
> Я же хочу потом и дальше со страничкой работать. Посему очень хочется
> на Перле, там потом будут готовые скрипты вставляться.Не вопрос.
Получаете страницу wget'ом, открываете её в perl'е и потрошите её как вам надо.
А если категорически "низя", но очень хочется и надо через perl, то можно и perl.
Есть такой wget для perl, называется curl )))
С ним что угодно можно скачать и залить. Очень мощный инструмент. Различных плюшек и примочек к нему масса.
Вам потребуется:
WWW::Curl::Easy и собственно сам curl
Не знаю вашу ОС, если FreeBSD, то нужно следующее:
cd /usr/ports/ftp/curl/
make install clean
cd /usr/ports/www/p5-WWW-Curl/
make install clean
rehash
Если начать установку сразу с p5-WWW-Curl, то она автоматически потянет за собой и curl.
#!/usr/bin/perl
use strict;
use warnings;
use WWW::Curl::Easy;
my $curl = WWW::Curl::Easy->new() or die "curl init failed!\n";
$curl->setopt(CURLOPT_VERBOSE, 1);
$curl->setopt(CURLOPT_FOLLOWLOCATION, 1);
my @headers = (
"User-Agent: Mozilla/5.0",
"Referer: http://www.the-game.ru/",
"Content-Type: application/x-www-form-urlencoded"
);
$curl->setopt(CURLOPT_HTTPHEADER, \@headers);
my $url = "http://www.the-game.ru/overview/";
$curl->setopt(CURLOPT_URL, $url);
my $user = 't1est';
my $pass = 't1est';
$curl->setopt(CURLOPT_POSTFIELDS, "action=login&login=$user&pwd=$pass");
sub body_callback {
my ( $chunk, $context ) = @_;
push @{$context}, $chunk;
return length ( $chunk );
}
$curl->setopt(CURLOPT_WRITEFUNCTION, \&body_callback);
my @body;
$curl->setopt(CURLOPT_FILE, \@body);
if ($curl->perform() != 0) {
print "Failed ::".$curl->errbuf."\n";
};
$curl->cleanup;
print join ( "", @body );
my $filename = "/tmp/thegameru.html";
open FH, ">", $filename;
print FH @body;
close FH;
CURLOPT_VERBOSE - выводит дополнительную информацию, записывает вывод в поток STDERR, или файл, указанный параметром CURLOPT_STDERR
CURLOPT_STDERR - альтернативный файл для вывода ошибок, используемый вместо потока ошибок STDERR
CURLOPT_FOLLOWLOCATION - рекурсивно следует за всеми заголовкам "Location: ", отправленным сервером в своем ответе, за исключением случая, когда установлена константа CURLOPT_MAXREDIRS
CURLOPT_MAXREDIRS - максимальное количество принимаемых редиректов, используется вместе с параметром CURLOPT_FOLLOWLOCATION
CURLOPT_HTTPHEADER - массив устанавливаемых HTTP-заголовков
CURLOPT_URL - загружаемый URL
CURLOPT_POSTFIELDS - передаваемые данные('var1=val1&var2=val2&...')/файлы для передачи в HTTP POST-запросе
CURLOPT_WRITEFUNCTION - название callback-функции, принимающей два параметра. Первым параметром является дескриптор cURL, а вторым параметром является строка с записываемыми данными. Данные должны быть сохранены с помощью данной функции. Она должна возвратить точное количество записанных байт, иначе закачка будет прервана с ошибкой.
CURLOPT_FILE - файл, в который будет записан результат передачи
CURLOPT_WRITEDATA – объект, в который производится запись принимаемых данных
Если работаете с cookies, то:
CURLOPT_COOKIE - содержимое заголовка "Cookie: ", используемого в HTTP-запросе, несколько cookies разделяются точкой с запятой с последующим пробелом (например, "fruit=apple; colour=red")
CURLOPT_COOKIEFILE - файл, содержащий cookies, данный файл должен быть в формате Netscape или просто заголовками HTTP, записанными в файл
CURLOPT_COOKIEJAR - файл, в который будут сохранены все внутренние cookies текущей передачи после закрытия дескриптора, например, после вызова curl_close