Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.02.05;
Скачать: [xml.tar.bz2];

Вниз

Как узнать существует ли файл на сайте   Найти похожие ветки 

 
Люди   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.011 c
15-1137081876
Piter
2006-01-12 19:04
2006.02.05
Анекдоты как средство массовой информации


2-1137495928
-matrix-
2006-01-17 14:05
2006.02.05
alphablend проблема


15-1137360108
Gero
2006-01-16 00:21
2006.02.05
Я был в шоке когда прочитал


15-1137027484
Bogdan1024
2006-01-12 03:58
2006.02.05
помогите трактовать


15-1137132775
Тульский
2006-01-13 09:12
2006.02.05
Задача по программированию





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский