В данной статье мы рассмотрим проблему, с которой вы столкнулись при работе с файлами через URL в среде Delphi 6 на операционной системе Windows 7. Вы столкнулись с ошибкой 12150, когда пытались получить размер файла по URL, в то время как скачивание файла происходило успешно. Давайте шаг за шагом разберемся в причине возникновения этой ошибки и найдем способ ее устранения.
Пример кода для получения размера файла по URL
В вашем коде используется функция GetFileSize, которая с помощью компонентов WinInet пытается получить размер файла, отправив HTTP-запрос с получением информации о длине содержимого (HTTP_QUERY_CONTENT_LENGTH). Если запрос выполняется на компьютере, не защищенном прокси-сервером, то все работает корректно. Однако, при использовании защищенной сети, где установлено множество политик и используется прокси-сервер, возникает ошибка 12150.
function TDDWIToolObject.GetFileSize(out Size: Int64): boolean;
begin
// Код функции...
end;
Анализ проблемы
Ошибка 12150 может быть вызвана различными причинами, включая проблемы с прокси-сервером, неправильные заголовки запроса, блокировки на уровне сетевого оборудования и др. В вашем случае, возможно, проблема связана с настройками прокси или с самим запросом, который не проходит через прокси должным образом.
Предложенное решение
В подтвержденном ответе предложено использовать функции HttpOpenRequest и HttpSendRequest вместо InternetOpenUrl. Это может помочь, так как эти функции предоставляют более гибкие возможности для настройки запроса и обработки ответов.
function GetRemoteFileSize(const Url : string): Integer;
begin
// Код функции...
end;
Комментарии к коду
В предоставленном примере кода также есть функция ParseURL, которая разбирает URL на составляющие, и функция GetWinInetError, которая помогает получить описание ошибки WinInet.
Рекомендации
Убедитесь, что прокси-сервер настроен корректно и разрешает запросы на получение длины содержимого.
Проверьте, не блокируются ли запросы на уровне сетевого оборудования.
Проверьте, корректно ли формируются HTTP-заголовки в вашем запросе.
Заключение
Использование функции GetRemoteFileSize вместо вашего исходного кода может помочь решить проблему ошибки 12150. Обратите внимание, что некоторые HTTP-ответы могут не содержать заголовок Content-Length, но вместо этого использовать Transfer-Encoding: chunked, что делает необходимым полное скачивание файла для определения его размера.
Надеемся, что предложенные рекомендации помогут вам устранить ошибку и успешно работать с файлами в Delphi 6 на Windows 7.
В статье рассматривается проблема возникновения ошибки 12150 при попытке получить размер файла по URL в среде Delphi 6 на Windows 7 и предлагаются способы её устранения.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS