Текущий архив: 2006.02.05;
Скачать: CL | DM;
Вниз
Как узнать существует ли файл на сайте Найти похожие ветки
← →
Люди (2006-01-13 02:46) [0]Нужно узнатьесть ли файл на сайте. Вот Код который я использую:
NetHandle := InternetOpen("Microsoft Internet Explorer 6.0", INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
if Assigned(NetHandle) then
for i:= 0 to 20 do
begin
if i < 10 then
url:="0"+IntToStr(i)
else
url:=IntToStr(i);
FileName := "C:\Save\asd"+url+".rar";
url := "http://www.___.ru/asd"+url+".rar";
(*1*) UrlHandle := InternetOpenUrl(NetHandle, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD, 0);
if Assigned(UrlHandle) then
begin { UrlHandle правильный? Начинаем загрузку }
FillChar(Buffer, SizeOf(Buffer), 0);
AssignFile(f,FileName);
ReWrite(f,1);
repeat
FillChar(Buffer, SizeOf(Buffer), 0);
InternetReadFile(UrlHandle, @Buffer, SizeOf(Buffer), BytesRead);
BlockWrite(f, Buffer, BytesRead);
until BytesRead = 0;
Buffer:="" ; BytesRead := 0; // Думал это поможет
InternetCloseHandle(UrlHandle); UrlHandle := 0; // Думал это поможет
Close(f);
end
else
{ UrlHandle неправильный. Генерируем исключительную ситуацию. }
showMessage("Нет Урлы");
// raise Exception.CreateFmt("Cannot open URL %s", [Url]);
end
else
{ NetHandle недопустимый. Генерируем исключительную ситуацию }
raise Exception.Create("Unable to initialize Wininet");
InternetCloseHandle(NetHandle); // закрываем сессию
Скачен код помоему отсюда.
В точке (*1*), если файла не существует, он UrlHandle не равен 0. А значит понимает что он(файл) существует. И качает и откуда-то выкачивает 7кБ - отбросы инета чтоли :-)
Может кто подскажет как определить есть ли файл на сайте.
И если можно, то как определить размер файла до скачивания(для прогресбара), а то после скачивания и так можно узнать. Может определение размера даст некоторый ответ о существовании файла?
← →
STK © (2006-01-13 02:51) [1]Может кто подскажет ссылочку, или пример подбросит.
← →
Джо © (2006-01-13 03:10) [2]> А значит понимает что он(файл) существует. И качает и откуда-
> то выкачивает 7кБ - отбросы инета чтоли :-)
Разумеется. Веб-сервер передает тебе страницу, на которой написано «Error 404», а вовсе не мусор :)
← →
palva © (2006-01-13 12:27) [3]Нужно проверять заголовки. Там должен быть код 200, а не 404 500 или еще что-нибудь. В заголовках еще можно увидеть тип файла (страница это картинка или архив), кодировку текста, если это текст длину, дату и многое другое. Как прочитать заголовки - не скажу, потому что не знаю что такое InternetOpen.
← →
Reindeer Moss Eater © (2006-01-13 12:28) [4]Если сервер верну двести, это еще не значит, что на сайте есть какой-то там файл.
← →
Джо © (2006-01-13 13:40) [5]Если есть возможность, то лучше перейти на протокол FTP, гораздо проще там с файлами работать, для того и был разработан, в отличие от HTTP.
← →
DiamondShark © (2006-01-13 13:58) [6]Никак не узнать.
Хотя бы по той простой причине, что в HTTP протоколе вообще отсутсвует понятие "файл".
Можно проверять статус ответа.
Другое дело, что некоторые сервера не возвращают статус ошибки.
← →
STK © (2006-01-13 21:14) [7]
> Джо © (13.01.06 03:10) [2]
>
> Разумеется. Веб-сервер передает тебе страницу, на которой
> написано «Error 404», а вовсе не мусор :)
А как можно определить что он именно её отправил, а не файл?
====================
> palva © (13.01.06 12:27) [3]
> Нужно проверять заголовки. Там должен быть код 200, а не
> 404 500 или еще что-нибудь. В заголовках еще можно увидеть
> тип файла (страница это картинка или архив), кодировку текста,
> если это текст длину, дату и многое другое. Как прочитать
> заголовки - не скажу, потому что не знаю что такое InternetOpen.
>
А где можно найти объяснение кода возврата, может в модуле WinInet. Но я искал что-то не нашёл, правда искал так не подробно.
← →
STK © (2006-01-13 21:22) [8]Всем спасибо за ответы, хоть что-то.
> Джо © (13.01.06 13:40) [5]
> Если есть возможность, то лучше перейти на протокол FTP,
> гораздо проще там с файлами работать, для того и был разработан,
> в отличие от HTTP.
Может подскажеш, как её реализовать. Но мне не надо заумного чтото делать. Я же не Качалку пишу а так обновитель файлов. Одним словом вирусных баз с DrWeb. они весят то не более 85 или 20 кБ. и на сайте их больше 50 наверно и не будет. Даже к выходу новой версии. А занимает по времени не более 2 минут на десяток первых.
Может кто делал что-то подобное, помогите.
← →
Люди (2006-01-14 03:05) [9]Народ помогите.
STK = Люди. Просто попросил друга создать ветку, а он подписался не зная мой ник. Так вот: STK это Люди.
← →
Джо © (2006-01-14 03:16) [10]> [8] STK © (13.01.06 21:22)
> Может подскажеш, как её реализовать.
Если сервер — твой, то поднимаешь на нем FTP-server. А доступ к нему можно получать хоть бы и с помощью функций из WinInet.pas. Там их для ftp много всяких, в том числе и проверка наличия файла.
Если сервер — не твой, то тут и советовать нечего. Это вариант отпадает.
---
Http-сервер хоть администрировать можешь? Там несложный скрипт можно тогда написать для отдачи либо заказанного файла, либо страницы определенного шаблона для индикации ошибки.
← →
Люди (2006-01-14 03:34) [11]
> Джо © (14.01.06 03:16) [10]
Http-сервер хоть администрировать можешь? Там несложный скрипт можно тогда написать для отдачи либо заказанного файла, либо страницы определенного шаблона для индикации ошибки.
Это уже за рамками. Смотри
> STK © (13.01.06 21:22) [8]
Там и так понятно. Администрировать не имею право, кто мне его даст.
> Если сервер — твой, то поднимаешь на нем FTP-server. А доступ
> к нему можно получать хоть бы и с помощью функций из WinInet.
> pas. Там их для ftp много всяких, в том числе и проверка
> наличия файла.
> Если сервер — не твой, то тут и советовать нечего. Это вариант
> отпадает.
ftp не мой, паролей не знаю. Уверен ведь, такой код использовали многие.
Нет всёже я думаю придётся эти архивы проверять после загрузки на компЮтер. Они всёж не по десяткам метров весят. Но всё таки интересно как это сделать.
Смотрел WinInet - нечего не дало. Вот я думаю может проверять первый кусок, размер его 1кб - если есть подпись как у архива, то ГУТ, если чтото похоже на HTML(страница ошибки с кодом 404) - то вот он и ответ.
>Джо
Как думаеш сработает? Но я попробую, только вот как разобраться с первым куском вот это новая проблема.
← →
STK © (2006-01-14 03:38) [12]Теперь меня преследует ник Люди. ноя ведь STK
← →
palva © (2006-01-14 12:23) [13]Проблема не очень понятна. Вы послали серверу запрос, он вернул вам заголовки и файл. Что требуется дальше?
← →
Anatoly Podgoretsky © (2006-01-14 16:56) [14]Не работает HTTP протокол с файлами, только со страницами, притом страницу надо указывать явно, узнать есть она или нет не существует возможности, часто они формируются динамически.
← →
STK © (2006-01-14 23:29) [15]
> palva © (14.01.06 12:23) [13]
> Проблема не очень понятна. Вы послали серверу запрос, он
> вернул вам заголовки и файл. Что требуется дальше?
Проблема в том что если я запрашиваю файл которого не существует, то он мне на 7 кБ присылает инфу(файл), здесь мне сказали что это обычная html с кодом ошибки 404 - ну она нам всем знакома (aqkf не существует). Вот как узнать перед загрузкой что файла нет, что его не качать, вот в чём проблема.
> Anatoly Podgoretsky © (14.01.06 16:56) [14]
> Не работает HTTP протокол с файлами, только со страницами,
> притом страницу надо указывать явно, узнать есть она или
> нет не существует возможности, часто они формируются динамически.
>
Могу Вас уверить что я качал файлы. 100% они приходят, кого я просил.
Пойду щас проверю что это за 7 кБ такие - чтоб точно знать.
← →
STK © (2006-01-14 23:38) [16]Взамен файла, которого не существует, приходит чистой воды файл html, но с сайта drweb, т.е. лично от них все ссылки и всё такое на странице. И извенения мол нет и не знают где.
← →
Джо © (2006-01-15 00:41) [17]> [16] STK © (14.01.06 23:38)
Ну, именно об этом и говорилось выше.
← →
palva © (2006-01-15 01:21) [18]> Вот как узнать перед загрузкой что файла нет
А почему вас не устраивает то, что при попытке разгружать вы получаете 7 кб и определяете, что файла нет. Вас что излишний траффик напрягает? Тогда прочитайте только заголовки и убедитесь, что Content-type равен rar/application или что там вы хотите получить и тогда разгружайте файл.
← →
STK © (2006-01-17 00:56) [19]
> palva © (15.01.06 01:21) [18]
> > Вот как узнать перед загрузкой что файла нет
> А почему вас не устраивает то, что при попытке разгружать
> вы получаете 7 кб и определяете, что файла нет. Вас что
> излишний траффик напрягает? Тогда прочитайте только заголовки
> и убедитесь, что Content-type равен rar/application или
> что там вы хотите получить и тогда разгружайте файл.
В кратце хотя бы, как у файла найти Content-type? или у кого там. Как я понял это гдето в заголовке файла. Но как именно найти, а?
И по поводу определения размера файла, как узнать.
И ещё один вопрос: В программе иногда пишутApplication.ProcessMessage
(или что-то типа того) - как я понял это обработка каких-то сообщений в долгой процедуре. А как это реализовать в потоке(скачка файлов производится в потоке), или в этом нет необходимости? Потому что потоку вроде как пофиг на сообщения, или я не прав? А дело в том, что в примере, откуда я взял код, в участке кода где идёт запись файла на диск стоит Application.ProcessMessage. Вот незнаю что и делать. Подскажите пожалуйста.
← →
STK © (2006-01-18 01:34) [20]Жду ответа, а ответа так и нет, а так охота доделать программу.
Страницы: 1 вся ветка
Текущий архив: 2006.02.05;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.015 c