![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как определить по редиректу реальное имя файла в сети
DRtM © (2006-11-26 08:43:00)Как определить по редиректу реальное имя файла в сети
через WinInet функции. Делал так-
function GetFileName(hRequest: hInternet):String;
var
lpdwReserved, lpdwBufferLength: DWord;
lpvBuffer: array [1..MAX_PATH] of Char;
PC: PChar;
begin
Result:= '';
lpdwReserved := 0;
lpdwBufferLength := SizeOf(lpvBuffer);
//hRequest- указатель на hUrl полученный с помощью
//InternetOpenURL(hInet,PChar(HttpFileAddr)...
//HttpFileAddr - строка редиректа
HttpQueryInfo(hRequest, HTTP_QUERY_LOCATION, @lpvBuffer,
lpdwBufferLength, lpdwReserved);
PC := PChar(@lpvBuffer);
Result:= StrPas(PC);
end;
Получаю неизвестно, что. Как сделать правильно определение
реального имени файла в сети?
VirEx (2007-03-22 12:24:00) [1]=== out ===
GET /cgi-bin/dlcounter/npscnt?file= http://podgoretsky.com/ftp/Docs/Internet/IntroIndy/IndyInDepth.doc&file_id=IndyInDepthHTTP/1.1
User-Agent: Opera/9.00 (Windows NT 5.1; U; ru)
Host: podgoretsky.com
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
Accept-Language: ru,ru_RU;q=0.9,en;q=0.8
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Connection: Keep-Alive
=== in ===
HTTP/1.1 302 Found
Date: Thu, 22 Mar 2007 09:24:11 GMT
Server: Apache/1.3.9 (Unix)
Location: http://podgoretsky.com/ftp/Docs/Internet/IntroIndy/IndyInDepth.doc
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html
13d
302 Found
Found
The document has moved here.
Apache/1.3.9 Server at podgoretsky.com Port 80
0
Плохиш (2007-03-22 11:42:00) [2]Кароче керлы не слухай здеся никого слахай сюды разводишь сервуху по панятиям на нужный файлуху и пока сервуха над ответкой тумкает куришь касяк покурил смотришь што там сервуха порешал если в отказ пошел опускай его если ответкаешь дери ответу и раздербанивай его башку тама ищи извилину с погонялом Content-disposition и бери всё шо в ней плохо лежит в ентой фигне ищеш кучку буквав в видухе filename апосля там ещё две какито палки положили нафига непонятки а посля палок ешо две недопалки стояти будут так хватай все буква после ентих недопалок и пока не увидиш ещё недопалки так енти буква и буди нужны тебе
ыкык (2007-03-22 09:37:00) [3]ответ к DRtM
=================================
мда... у меня такая же проблема.
Народ, зачем вы тогда силите в форуме и косите под программистов
Плохиш (2006-12-03 20:32:00) [4]
> DRtM (03.12.06 08:14) [13]
> Вообщем не подсказки, а одни загадки
> 1.[4] + RFC 2183
> Ну и что. Поискал я по интернету информацию
Смени интернет, в моём в первой же ссылки приводится полное описание.
Anatoly Podgoretsky (2006-12-03 11:08:00) [5]> DRtM (03.12.2006 8:14:13) [13]
Тебе сказали повеситься.
DRtM (2006-12-03 08:14:00) [6]Вообщем не подсказки, а одни загадки
1.[4] + RFC 2183
Ну и что. Поискал я по интернету информацию
ничего связного не нашел, только везде цитируется один пример с zip файлом при использовании CGI программы на Delphi и описание стандарта
передачи данных.
2.А они не определяют, а просто принимают.
Да пусть принимают. Я же спросил как определить. Функция WinInet не определяет, поэтому я и оратился за помощью в этот форум, а в ответ одни загадки!!!
Anatoly Podgoretsky (2006-12-02 15:22:00) [7]> DRtM (02.12.2006 3:44:10) [10]
> Как многие программы закачки определяют тот самый
реальный файл если по Вашему консолидированному мнению сервер
ни чего не должен вернуть.
А они не определяют, а просто принимают.
Плохиш (2006-12-02 12:26:00) [8][4] + RFC 2183
DRtM (2006-12-02 03:44:00) [9]Ладно пусть я не прав во всем, что написал выше, тогда поставлю
вопрос иначе. Как многие программы закачки определяют тот самый
реальный файл если по Вашему консолидированному мнению сервер
ни чего не должен вернуть. Я говорю не про функцию HttpQueryInfo, а вообще КАК? Ну к примеру загрузите в ссылку выше в какой нибудь известный менеджер закачек и он определит файл для закачки - в данном случае
http://podgoretsky.com/ftp/Docs/Internet/IntroIndy/IndyInDepth.doc.
Плохиш (2006-12-01 17:38:00) [10]
> Anatoly Podgoretsky © (01.12.06 16:44) [8]
Вот пришёл АП и всё испортил. Может я в ентой ветки расслабляюсь :-) Тебе других веток мало, да? :-P
Anatoly Podgoretsky (2006-12-01 16:44:00) [11]> Плохиш (01.12.2006 13:18:06) [6]
Я перед этим привел более скрытый вариант скрипта, крайний случай
http://podgoretsky.com/IndyInDepth.doc
Никакого IndyInDepth.doc в голове нет и в помине, да и файла тоже такого нет, но пользователь получит что то под названием IndyInDepth.doc
Так то!!!
Anatoly Podgoretsky (2006-12-01 16:41:00) [12]> DRtM (01.12.2006 12:29:05) [5]
> HTTP_QUERY_LOCATION должен вернуть прямую ссылку,
А вот шиш вам, ничего я вам не верну.
А если бы и вернул, то что с ней делать то, по прямой ссылке обратиться нельзя.
Все веб запросы возвращают только виртуальную ссылку, относительно root и то только в простейших случаях, а учитывая возможности динамического постороения страниц, то даже и файла быть не может. А если учесть хакерские расширения, которые использованы в Apache то вообще не о чем говорить. Вот пример
http://podgoretsky.com/ftp/Docs/Internet/IntroIndy/IndyInDepth.doc&file_id=IndyInDepth
Скажем папки Docs может физически не быть, вместо нее будет выполняться какая то скрытая программа, и даже файла IndyInDepth.doс тоже может не быть, это всего лишь для того, что бы посетителя не пугать названием MyHack.Exe
Плохиш (2006-12-01 13:18:00) [13]
> так вот - это не прямая ссылка на файл IndyInDepth.doc,
> а так называемый
> РЕДИРЕКТ
Чушь, это запуск на выполнение скрипта и передача этому скрипту параметров.
> сервер по нему с помощью функции HttpQueryInfo с параметром
> HTTP_QUERY_LOCATION должен вернуть прямую ссылку
Нифига, не должен. А вполне может вернуть набор байтов. Большинство сайтов так и поступают.
> 2.Да, волшебное слово есть "Content-disposition" - объясните
> по подробнее.
RFC 2183
DRtM (2006-12-01 12:29:00) [14]1. >Так тебе какое имя надо?
Объясняю-
вот например ссылка на книгу по
компонентам Indi, которая размещена на известном Вам сайте
http://podgoretsky.com/cgi-bin/dlcounter/npscnt?file=http://podgoretsky.com/ftp/Docs/Internet/IntroIndy/IndyInDepth.doc&file_id=IndyInDepth
так вот - это не прямая ссылка на файл IndyInDepth.doc, а так называемый
РЕДИРЕКТ, сервер по нему с помощью функции HttpQueryInfo с параметром
HTTP_QUERY_LOCATION должен вернуть прямую ссылку, т.е. заканчивающуюся реальным именем файла, в данном случае IndyInDepth.doc.
В моем примере в функцию HttpQueryInfo я передаю первым параметром
указатель на hRequest, полученный с помощью функции
InternetOpenURL(hInet,PChar(HttpFileAddr)...
где HttpFileAddr и есть тот самый РЕДИРЕКТ.
hRequest - получен верно, т.к. я скачал указанный выше файл своей программой, естественно не зная с каким именем должен быть закаченный
файл(указал просто IndyInDepth).
HttpQueryInfo - возвращает False, т.е. не работает.
2.Да, волшебное слово есть "Content-disposition" - объясните по подробнее.
Плохиш (2006-11-30 11:10:00) [15]Да, волшебное слово есть "Content-disposition"
Плохиш (2006-11-30 11:08:00) [16]У меня сервис отдаёт один из 2 миллионов файлов по запросу и обзывает его для клиента всегда одинаково. Так тебе какое имя надо?
DRtM (2006-11-30 10:36:00) [17]?
DRtM (2006-11-30 04:42:00) [18]Неужели ни кто не определял реальное имя файла в сети.