Форум: "Сети";
Текущий архив: 2007.11.25;
Скачать: [xml.tar.bz2];
ВнизКак определить по редиректу реальное имя файла в сети Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.042 c