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

Вниз

Загрузка файла по 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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.02 c
2-1214461822
девушка
2008-06-26 10:30
2008.07.27
Аутентификация в MS SQL через ADO


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


6-1190918176
Sergl
2007-09-27 22:36
2008.07.27
возникает ошибка: Asynchronous socket error 10053


2-1214219491
Евро2008
2008-06-23 15:11
2008.07.27
Повернуть на 90 градусов


10-1148306525
atruhin
2006-05-22 18:02
2008.07.27
overload функции и IDispatch