Forum Webscript.Ru

Программирование => Perl => Тема начата: Cardy от 28 Февраля 2003, 16:35:57

Название: Имя получаемого файла.
Отправлено: Cardy от 28 Февраля 2003, 16:35:57
Есть проблемка, решение которой я так и не нашел ни в манах ни в инете.
От пользователей приходят URl для скачивания. Требуется узнать конечное имя получаемого файла.
К примеру имеем запрос:
http://www.google.com/
так вот нужно конечное имя файла (без его закачки)
index.htm
И главное - чтобы распознавались вот такие урлы:
http://www.softodrom.ru/get.php?id=1706&action=dl
который вообще должен возвращать имя wwr_rus.rar

Заранее премного благодарен за ответы.
Название: Имя получаемого файла.
Отправлено: NeoNox от 28 Февраля 2003, 17:05:53
Я немного не уловил суть вопроса.
Тебе нужно из http://www.test.com/test.jpg забрать только test.jpg?
Или что другое? Пиши подробнее, будет проще ответить.
Название: Имя получаемого файла.
Отправлено: Cardy от 28 Февраля 2003, 17:35:40
Почти. Точнее - я получаю запрос вида http://www.test.com/ - т.е. мне не известен имя файла, кот. мне отдаст сервер (index.htm, default.htm ...)
так вот хочется его таки узнать не скачивая. и во втором случае - я получаю URL (http://www.softodrom.ru/get.php?id=1706&action=dl), кот. на самом деле приводит к файлу под именем wwr_rus.rar. Вот эти-то мне имена и нужны до закачки их к себе.
Название: Имя получаемого файла.
Отправлено: mike от 28 Февраля 2003, 18:38:26
Придется делать запрос на сервер и обрабатывать заголовки сервера типа "302 Moved" и "Location" или "Content-Location".
ИМХО, нужно смотреть доки по LWP::UserAgent, HTTP::Response или Net::HTTP.
Название: Имя получаемого файла.
Отправлено: Cardy от 28 Февраля 2003, 19:23:23
Насколько я понял из прочтения этих манов там без HTTP::Request->new(GET $url) не обойтись. В принципе вот этот код выдает то, что нужно:
my $ua = LWP::UserAgent->new();
my $req = HTTP::Request->new(GET => $url);
my $response = $ua->request($req);
printf "%s", $response->base();

но я так и не понял скачивает ли он при этом файл или нет. Судя по продолжительности ответа - скачивает. Кто-нить подскажет так ли это? И как подправить, чтобы не скачивал?
Название: Имя получаемого файла.
Отправлено: mike от 28 Февраля 2003, 19:37:41
Цитировать
Судя по продолжительности ответа - скачивает. Кто-нить подскажет так ли это? И как подправить, чтобы не скачивал?

Скачивает. Попробуй вместо GET использовать HEAD.
Название: Имя получаемого файла.
Отправлено: Cardy от 28 Февраля 2003, 19:45:04
YES!!!
Big THANKS!!!

PS Будешь в питере - с меня пиво!
=)
Название: Имя получаемого файла.
Отправлено: mike от 28 Февраля 2003, 20:01:45
Цитировать
Будешь в питере - с меня пиво!
=)

[OFF]Так-с... Где мой календарь? ;) :D[/OFF]