Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.11.25;
Скачать: CL | DM;

Вниз

Как определить по редиректу реальное имя файла в сети   Найти похожие ветки 

 
DRtM   (2006-11-26 08:43) [0]

Как определить по редиректу реальное имя файла в сети
через 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;

Получаю неизвестно, что. Как сделать правильно определение
реального имени файла в сети?


 
DRtM   (2006-11-30 04:42) [1]

Неужели ни кто не определял реальное имя файла в сети.


 
DRtM   (2006-11-30 10:36) [2]

?


 
Плохиш ©   (2006-11-30 11:08) [3]

У меня сервис отдаёт один из 2 миллионов файлов по запросу и обзывает его для клиента всегда одинаково. Так тебе какое имя надо?


 
Плохиш ©   (2006-11-30 11:10) [4]

Да, волшебное слово есть "Content-disposition"


 
DRtM   (2006-12-01 12:29) [5]

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-12-01 13:18) [6]


> так вот - это не прямая ссылка на файл IndyInDepth.doc,
> а так называемый
> РЕДИРЕКТ

Чушь, это запуск на выполнение скрипта и передача этому скрипту параметров.

> сервер по нему с помощью функции HttpQueryInfo с параметром
> HTTP_QUERY_LOCATION должен вернуть прямую ссылку

Нифига, не должен. А вполне может вернуть набор байтов. Большинство сайтов так и поступают.

> 2.Да, волшебное слово есть "Content-disposition" - объясните
> по подробнее.

RFC 2183


 
Anatoly Podgoretsky ©   (2006-12-01 16:41) [7]

> 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


 
Anatoly Podgoretsky ©   (2006-12-01 16:44) [8]

> Плохиш  (01.12.2006 13:18:06)  [6]

Я перед этим привел более скрытый вариант скрипта, крайний случай

http://podgoretsky.com/IndyInDepth.doc

Никакого IndyInDepth.doc в голове нет и в помине, да и файла тоже такого нет, но пользователь получит что то под названием IndyInDepth.doc

Так то!!!


 
Плохиш ©   (2006-12-01 17:38) [9]


> Anatoly Podgoretsky ©   (01.12.06 16:44) [8]

Вот пришёл АП и всё испортил. Может я в ентой ветки расслабляюсь :-) Тебе других веток мало, да? :-P


 
DRtM   (2006-12-02 03:44) [10]

Ладно пусть я не прав во всем, что написал выше, тогда поставлю
вопрос иначе. Как многие программы закачки определяют тот самый
реальный файл если по Вашему консолидированному мнению сервер
ни чего не должен вернуть. Я говорю не про функцию HttpQueryInfo, а вообще КАК? Ну к примеру загрузите в ссылку выше в какой нибудь известный менеджер закачек и он определит файл для закачки - в данном случае
http://podgoretsky.com/ftp/Docs/Internet/IntroIndy/IndyInDepth.doc.


 
Плохиш ©   (2006-12-02 12:26) [11]

[4] + RFC 2183


 
Anatoly Podgoretsky ©   (2006-12-02 15:22) [12]

> DRtM  (02.12.2006 3:44:10)  [10]

> Как многие программы закачки определяют тот самый
реальный файл если по Вашему консолидированному мнению сервер
ни чего не должен вернуть.

А они не определяют, а просто принимают.


 
DRtM   (2006-12-03 08:14) [13]

Вообщем не подсказки, а одни загадки
1.[4] + RFC 2183
Ну и что.  Поискал я по интернету информацию
ничего связного не нашел, только везде цитируется один пример с zip файлом при использовании CGI программы на Delphi и описание стандарта
передачи данных.
2.А они не определяют, а просто принимают.
Да пусть принимают. Я же спросил как определить. Функция WinInet не определяет, поэтому я и оратился за помощью в этот форум, а в ответ одни загадки!!!


 
Anatoly Podgoretsky ©   (2006-12-03 11:08) [14]

> DRtM  (03.12.2006 8:14:13)  [13]

Тебе сказали повеситься.


 
Плохиш ©   (2006-12-03 20:32) [15]


> DRtM   (03.12.06 08:14) [13]
> Вообщем не подсказки, а одни загадки
> 1.[4] + RFC 2183
> Ну и что.  Поискал я по интернету информацию

Смени интернет, в моём в первой же ссылки приводится полное описание.


 
ыкык   (2007-03-22 09:37) [16]

ответ к DRtM
=================================
мда...  у меня такая же проблема.
Народ, зачем вы тогда силите в форуме и косите под программистов


 
Плохиш ©   (2007-03-22 11:42) [17]

Кароче керлы не слухай здеся никого слахай сюды разводишь сервуху по панятиям на нужный файлуху и пока сервуха над ответкой тумкает куришь касяк покурил смотришь што там сервуха порешал если в отказ пошел опускай его если ответкаешь дери ответу и раздербанивай его башку тама ищи извилину с погонялом Content-disposition и бери всё шо в ней плохо лежит в ентой фигне ищеш кучку буквав в видухе filename апосля там ещё две какито палки положили нафига непонятки а посля палок ешо две недопалки стояти будут так хватай все буква после ентих недопалок и пока не увидиш ещё недопалки так енти буква и буди нужны тебе


 
VirEx ©   (2007-03-22 12:24) [18]

=== out ===
GET /cgi-bin/dlcounter/npscnt?file=http://podgoretsky.com/ftp/Docs/Internet/IntroIndy/IndyInDepth.doc&file_id=IndyInDepth HTTP/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
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>302 Found</TITLE>
</HEAD><BODY>
<H1>Found</H1>
The document has moved <A HREF="http://podgoretsky.com/ftp/Docs/Internet/IntroIndy/IndyInDepth.doc">here</A>.<P>
<HR>
<ADDRESS>Apache/1.3.9 Server at podgoretsky.com Port 80</ADDRESS>
</BODY></HTML>

0



Страницы: 1 вся ветка

Текущий архив: 2007.11.25;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.019 c
15-1192885708
к2в2
2007-10-20 17:08
2007.11.25
илюстратор + delphi


4-1179215547
allucard
2007-05-15 11:52
2007.11.25
Поменять обои рабочего стола


2-1194165050
savyhinst
2007-11-04 11:30
2007.11.25
Классные константы


3-1184004439
Giperon
2007-07-09 22:07
2007.11.25
Локальная база данных - какая технология лучше?


5-1163604047
--= Eagle =--
2006-11-15 18:20
2007.11.25
EClassNotFound