Ошибка с кодом 10054 указывает на то, что TCP-соединение было принудительно прервано на стороне удаленного сервера. Это может происходить по множеству причин, включая проблемы с сетевой инфраструктурой, настройками безопасности или некорректное использование компонентов для работы с сетью.
Проблема и контекст
Разработчик столкнулся с ошибкой 10054 при попытке загрузить JSON через TIdHTTP в Delphi. Соединение работает корректно в браузере, что указывает на отсутствие проблем с URL и сервером. В контексте вопроса упоминается, что использование THTTPClient может быть проще, если нет других зависимостей Indy.
Решение, предложенное в контексте
Ответ от Remy Lebeau указывает на необходимость использования компонента TIdSSLIOHandlerSocketBase-совместимого для свойства IOHandlerTIdHTTP, так как загрузка происходит по зашифрованному HTTPS-URL. Если используется актуальная версия Indy, TIdHTTP автоматически создаст TIdSSLIOHandlerSocketOpenSSL при необходимости, но на нем будет включена только TLS 1.0. Если требуется TLS 1.1+ или другая настройка, необходимо создать TIdSSLIOHandlerSocketOpenSSL самостоятельно и настроить его.
Альтернативное решение
Для решения проблемы можно также проверить следующие шаги:
Убедитесь, что все зависимости Indy обновлены до последней версии.
Проверьте настройки брандмауэра или сетевого экрана, которые могут блокировать загрузку.
Проверьте сетевые настройки компьютера на предмет ограничений или неправильной конфигурации.
Попробуйте выполнить ту же операцию, используя THTTPClient, как было предложено в комментарии.
Пример кода на Object Pascal (Delphi)
program GetJSONData;
{$APPTYPE CONSOLE}
uses
System.SysUtils,
IdGlobal,
IdHTTP,
IdSSLOpenSSL; // Добавьте эту директиву, если она еще не добавлена
var
IdHTTP1: TIdHTTP;
JSON: string;
begin
IdHTTP1 := TIdHTTP.Create(nil);
try
// Назначьте SSL-обработчик, если он еще не назначен
if IdHTTP1.IOHandler is nil then
IdHTTP1.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
JSON := IdHTTP1.Get('https://login.microsoftonline.com/common/.well-known/openid-configuration');
// Обработка полученных данных
finally
IdHTTP1.Free;
end;
end.
Заключение
При работе с TIdHTTP в Delphi для загрузки данных по HTTPS важно убедиться, что используется SSL-обработчик. В случае возникновения ошибки 10054, следует проверить версию Indy, настройки безопасности и сетевую инфраструктуру. Приведенный пример кода демонстрирует, как настроить TIdHTTP для работы с HTTPS, используя TIdSSLIOHandlerSocketOpenSSL.
Разработчик столкнулся с ошибкой 10054 при попытке установить TCP-соединение для загрузки JSON через компонент TIdHTTP в Delphi, из-за чего возможны проблемы с зашифрованным соединением, и для их решения может потребоваться использование SSL-обработчика.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.