![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать размер файла перед скачиванием
Kme © (2004-04-27 22:48:00)Добрый вечер! Обращаюсь к Вам с таким вопросом. Как узнать размер файла перед скачиванием по HTTP? В интернете везде лежит функция
GetUrlInfo(HTTP_QUERY_CONTENT_LENGTH, ' http://some.com/some.zip');
function GetUrlInfo(const dwInfoLevel: DWORD; const FileURL: string):
string;
var
hSession, hFile: hInternet;
dwBuffer: Pointer;
dwBufferLen, dwIndex: DWORD;
begin
Result := '';
hSession := InternetOpen('STEROID Download',
INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
if Assigned(hSession) then begin
hFile := InternetOpenURL(hSession, PChar(FileURL), nil, 0,
INTERNET_FLAG_RELOAD, 0);
dwIndex := 0;
dwBufferLen := 20;
if HttpQueryInfo(hFile, dwInfoLevel, @dwBuffer, dwBufferLen, dwIndex)
then Result := PChar(@dwBuffer);
if Assigned(hFile) then InternetCloseHandle(hFile);
InternetCloseHandle(hsession);
end;
Но она выдает неправильные значения. Очень не хочется использовать компоненты FastNet! Необходимо обойтись без них!
Kme (2004-04-28 22:06:00) [1]To BiN: Огромное спасибо! Все заработало!
VMcL (2004-04-28 10:45:00) [2]>>SammIk © (28.04.04 02:41) [1]
ИМХО, сначала следует послать запрос HEAD.
BiN (2004-04-28 09:19:00) [3]>>SammIk
Сдается мне, что работа HttpQueryInfo сводится именно к такому get-запросу
>>Kme (27.04.04 22:48)
Странно, что у тебя AV не выскакивает.
Замени dwBuffer: Pointer; на
dwBuffer: array [0..20] of char;
и все будет работать.
SammIk (2004-04-28 02:41:00) [4]TClientSocket
Конектишься, кидаешь гет запрос, тебе возвращают что-то
типа:
HTTP/1.0 200 OK
Date: Tue, 27 Apr 2004 22:39:16 GMT
Server: Apache/1.3.27 (Unix) FrontPage/5.0.2.2623 PHP/4.3.2 mod_gzip/1.3.19.1a mod_accounting/1.0 mod_fastcgi/2.4.0 mod_ssl/2.8.14 OpenSSL/0.9.7b rus/PL30.17
Content-Length: 32794 <<<<<Размер в баитах
Connection: close
Content-Type: text/html; charset=windows-1251