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

Вниз

Загрузка файла по HTTP   Найти похожие ветки 

 
KVV   (2008-06-24 19:46) [0]

Код взял где-то на форуме.


function GetInetFile(fileURL, FileName: String): boolean;
const
 BufferSize = 1024;
var
 hSession, hURL: HInternet;
 Buffer: array[1..BufferSize] of Byte;
 BufferLen: DWORD;
 f: File;
 sAppName: string;
begin
 Result:=False;
 hSession:=InternetOpen(PChar("IE"),INTERNET_OPEN_TYPE_PRECONFIG,nil,nil,0);
 if hSession=nil then //Msg
 else try
   hURL:=InternetOpenURL(hSession,PChar(fileURL),nil,0,0,0);
   if hURL=nil then //Msg
   else try
     AssignFile(f, FileName);
     Rewrite(f,1);
     repeat
       InternetReadFile(hURL,@Buffer,SizeOf(Buffer),BufferLen);
       BlockWrite(f, Buffer, BufferLen)
     until BufferLen=0;
     CloseFile(f);
     Result:=True;
   finally InternetCloseHandle(hURL); end;
 finally InternetCloseHandle(hSession); end;
end;

function CheckInetUrlExist(url: string): boolean;
var
 hNet: HINTERNET;
 hUrl: HINTERNET;
begin
 Result := False;
 hNet:=InternetOpen(PChar("IE"),INTERNET_OPEN_TYPE_PRECONFIG,nil,nil,0);
 if hNet=nil then //Msg
 else try
   hUrl:=InternetOpenUrl(hNet,PChar(Url),nil,0,INTERNET_FLAG_RELOAD,0);
   if hUrl=nil then //Msg
   else try
     Result:=Assigned(hUrl);
   finally InternetCloseHandle(hUrl); end;
 finally InternetCloseHandle(hNet); end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Button1.Enabled:=False; try
   If CheckInetUrlExist("http://www.nalog.ru/index.html")
   then GetInetFile("http://www.nalog.ru/index.html",
     "f:\!_Delme\index.html"
   );
 finally Button1.Enabled:=True; end;
end;


Есть несколько вопросов:
1. Если интернет не подключен, программа виснет на команде "InternetOpenURL" (только в XP), в Win98 выдается окно "Подключение удаленного доступа" (или что-то в этом роде) - отменяешь и все - программа завершается без загрузки.
2. Пару раз в XP зависание было и при подключенном интернете.

Можно ли каким-либо образом узнать, что интернет не подключен прежде, чем вызывать InternetOpenURL?
Или что-то нужно делать по-другому?

3. Если файла на сайте нет, возвращается HTML-код с сообщением об ошибке (т.е. файл-результат есть, но содержит HTML-код).

Можно ли узнать, что файла нет, не обрабатывая этот HTML-код.

4. Где-то на форуме видел другие варианты загрузки.
В них вместо "InternetOpenURL" использовались "InternetConnect",
"HTTPopenRequest", "HTTPsendRequest", "InternetQueryDataAvailable".
Что правильнее?


 
Palladin ©   (2008-06-24 20:49) [1]

WinInet, штука тонкая. А все это ты реализуешь именно через него. Думаю в твоем случае, все"же, лучше будет отработать через IdHTTP.


 
KVV   (2008-06-24 21:18) [2]

IdHTTP - это то, что в п.4 или что-то другое?
(Только чур сильно не пинать за вопрос)



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

Форум: "Начинающим";
Текущий архив: 2008.07.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.007 c
15-1213097229
Заочник-самоучка
2008-06-10 15:27
2008.07.27
Хочу совет


2-1214293510
IndyHelp
2008-06-24 11:45
2008.07.27
Indy - connection closed


15-1212514820
olevacho_
2008-06-03 21:40
2008.07.27
инструменты создания отчетов для полиграфии


15-1212916219
tesseract
2008-06-08 13:10
2008.07.27
eve-online А кто на форуме вообще играет, знаю что есть и много


15-1212590644
bycka
2008-06-04 18:44
2008.07.27
Из Delphi в C#





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский