Главная страница
    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-1213126413
wl
2008-06-10 23:33
2008.07.27
oracle getting started


2-1214302930
savyhinst
2008-06-24 14:22
2008.07.27
Debuging troubles


2-1214361504
apic
2008-06-25 06:38
2008.07.27
GetFocus()


9-1171983109
Kav
2007-02-20 17:51
2008.07.27
smd2v12-src большая модель приводит к Out of memory


2-1214466680
Муслик
2008-06-26 11:51
2008.07.27
Из файла в таблицу





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