Приходит юзер к провайдерам и говорит.
- У Вас маршрут на Москву не работает.
- А откуда Вы знаете?...
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) thenbegin
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;
end;
Код-снippet на языке Delphi! Функция GetUrlInfo предназначена для извлечения информации о URL, в частности, размера файла (контентная длина). Вот что она делает:
Она открывает сессию Интернета с помощью InternetOpen.
Затем она открывает соединение по URL с помощью InternetOpenURL, указывая URL (http://some.com/some.zip) и различные флаги.
Функция затем вызывает HttpQueryInfo для запроса информации о URL, передавая уровень информационного уровня (dwInfoLevel = HTTP_QUERY_CONTENT_LENGTH) и другие параметры.
Если запрос успешен, она извлекает контентную длину (в байтах) из указателя dwBuffer и присваивает ее переменной Result.
Наконец, она закрывает файловый обработчик и сессию Интернета с помощью InternetCloseHandle.
Чтобы использовать эту функцию, вам нужно просто вызвать ее с желаемым URL и информационным уровнем:
Обратите внимание, что это код quite old (около 2003-2005 года) и может не работать с современными версиями Delphi или новыми операционными системами. Вам может потребоваться обновить его для использования более recent Internet API или библиотек.
Перед скачиванием файла можно узнать его размер с помощью функции HttpQueryInfo, которая возвращает информацию о файле, включая его длину.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.