TIdHTTP.Get() возвращает пустую строку

Я столкнулся со странной проблемой, в которой метод Get() TIdHTTP для действительного URL-адреса возвращает пустую строку, но только на определенных машинах. Кроме того, на этих же машинах, если я перейду по тому же URL-адресу в Google Chrome, он вернет ожидаемое значение.

Никаких исключений не происходит, просто возвращается пустая строка. Пробовал как HTTPS, так и HTTP-версии URL-адреса, и возникает одна и та же проблема. Также пытался использовать CookieManager и установить HandleRedirects в true, но безуспешно.

Речь идет о сервере Windows 2012, и мое приложение занесено в белый список его брандмауэра.

Есть ли что-нибудь, что я мог бы попытаться диагностировать/исправить эту проблему? Я потерялся !


person delphirules    schedule 30.11.2020    source источник


Ответы (1)


К сожалению, предоставленной информации недостаточно для диагностики происходящего. Поскольку исключений не возникает, есть только две возможности. Либо:

  • сервер действительно отправляет пустые данные тела, например, если вы используете Indy по умолчанию UserAgent, и серверу это не нравится/не распознается. Некоторые серверы поддерживают UserAgent и будут предоставлять разные данные для разных агентов. Попробуйте настроить свойство TIdHTTP.Request.UserAgent так, чтобы оно имитировало настоящий веб-браузер, и посмотрите, изменится ли результат.

  • сервер отправляет данные тела, но данные теряются при преобразовании в String, например, из-за неправильного преобразования кодировки. TIdHTTP.Get() имеет перегрузку, которая заполняет TStream вместо возврата String, вы можете использовать это, чтобы исключить любые проблемы с обработкой кодировки.

Я предлагаю вам просмотреть необработанный HTTP-трафик, чтобы убедиться, что запрос и ответ соответствуют вашим ожиданиям. Для захвата необработанных данных вы можете использовать анализатор пакетов, например Wireshark. Или назначьте один из производных от Indy компонентов TIdConnectionIntercept, например TIdLog..., свойству TIdHTTP.Intercept.

person Remy Lebeau    schedule 01.12.2020