Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.135.62.42] |
|
Сообщ.
#1
,
|
|
|
Как получить имя файла скрывающегося за php скриптом.
На пример: http://www.historyfoundation.ru/dl.php?file=756 Подразумеваю что перед загрузкой нужно на этот скрипт послать какойто запрос... Но какой и как...? |
Сообщ.
#2
,
|
|
|
t=4725534 - это и есть твой запрос,
браузер сохраняет файл под именем [rutracker.org].t{$t}.torrent, то есть для t=4725534 имя файла будет выглядеть как [rutracker.org].t4725534.torrent Но это "художественная самодеятельность" браузера На самом деле никакого имени файла не существует - какое ты придумаешь - такое и будет. ПХП тебе отдает стрим http, который ты обязан сохранить. Куда его сохранять - твое дело, если в файл - то тоже, его имя - это твои проблемы. По http это выглядит приблизительно так - GET http://dl.rutracker.org/forum/dl.php?t=4725534 ---> 200 OK Больше нет там никаких имен файлов, только хардкор, только дата! |
Сообщ.
#3
,
|
|
|
Это все понятно.
Но браузер всетаки както узнает имя. Если в браузере кликнуть http://www.historyfoundation.ru/dl.php?file=756 то он предложит сохранить это в "document.pdf" |
Сообщ.
#4
,
|
|
|
если в браузере кликнуть, то ничего не произойдет
wget http://www.historyfoundation.ru/dl.php?file=756 --2015-09-23 16:10:02-- http://www.historyfoundation.ru/dl.php?file=756 Resolving www.historyfoundation.ru... 78.110.50.117 Connecting to www.historyfoundation.ru|78.110.50.117|:80... connected. HTTP request sent, awaiting response... 502 Bad Gateway 2015-09-23 16:10:02 ERROR 502: Bad Gateway. |
Сообщ.
#5
,
|
|
|
я знаю как это сделать.
1) Нужно парсить HTTP заголовки 2) в HTTP заголовке должна быть строка следующего вида другого пути, кроме как анализ HTTP заголовков, нет. Это можно делать эффективно с помощью libcurl |
Сообщ.
#6
,
|
|
|
Спасибо за совет.
А чем ещё можно http заголовок запросить? Через CppWebBrowser можно как-нибудь? |
Сообщ.
#7
,
|
|
|
Оказалось все просто:
AnsiString FileName; TMemoryStream * MS = new TMemoryStream(); IdHTTP1->Get("http://www.historyfoundation.ru/dl.php?file=756",MS); //Memo1->Lines->Text=IdHTTP1->Response->ExtraHeaders->Text; Memo1->Lines->Text=IdHTTP1->Response->ExtraHeaders->Values[IdHTTP1->Response->ExtraHeaders->IndexOfName("Content-Disposition")]; TStringList *list=new TStringList; IdHTTP1->Response->ExtraHeaders->Extract("Content-Disposition",list); int pos=list->Strings[0].Pos("="); FileName=list->Strings[0].SubString(pos+1,list->Strings[0].Length()-pos); MS->SaveToFile(FileName); delete MS; |