powered by simpleCommunicator - 2.0.37     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Странное поведение Indy (TIdHttp)
25 сообщений из 26, страница 1 из 2
Странное поведение Indy (TIdHttp)
    #40097086
KinsT_UA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Есть десктопное приложение, которое обращается к файловому сервису через компонент TIdHttp и с помощью метода POST получает ответ в формате JSON.
JSON-параметр "file_data" содержит тело файла в кодировке BASE64.

В компании создали клон проекта, настроили отдельные сервера (в облаке).

СУТЬ ПРОБЛЕМЫ
При обращении к базовому сервису - все работает отлично.
При обращении к клону через TChromium.Browser.MainFrame.LoadRequest (компоненты CEF4) - срабатывает от 1 до 3 миллисекунд.
При обращении к клону через TIdHttp - наблюдается задержка получения ответа (до 15 секунд для файла размером 495 КБ)!

TIdHttp пробовал использовать как из кода, так и на форму бросал.
Эффект одинаково плохой. Никаких спец.настроек для компонента не произвожу.

Понимаю, что проблема вероятнее всего в окружении,
но админы крест на пузе рисуют и говорят, что единственное отличие это то,
что старые сервера распределенные (физически разные), а новые в одном дата-центре и одном облаке.

Знающие люди, подскажите пожалуйста, может быть есть какая-то настройка в самом Indy?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
procedure TMainForm.DwnlWithIndy;
var vURL : string;
  vDataId : TIdMultiPartFormDataStream;
  vResponse : string;
  vJSON: TJSONObject;
  vSS : TStringStream;
  vIdHttp : TIdHTTP;
begin
  vIdHttp := TIdHTTP.Create(Self);
  try
    // Параметры запроса;
    vDataId := TIdMultiPartFormDataStream.Create;
    vDataId.AddFormField('path', ePathSrv.Text).ContentTransfer := '8bit';
    vDataId.AddFormField('compression_mode', 'BASE64');
    vDataId.AddFormField('response_type', 'JSON');

    // URL для отправки запроса;
    vURL := cbbHost.Text + '?show_file';

    memoRequest.Clear;
    memoRequest.Lines.Add(DateTimeToStr(Now)+#13#10+'Request params added!');

    // Отправка POST запроса;
    memoResponse.Clear;
    memoResponse.Lines.Add('Download START: '+#09+DateTimeToStr(Now));
    vResponse := vIdHttp.Post(vURL, vDataId);
    memoResponse.Lines.Add('Download END: '+#09+DateTimeToStr(Now));

    // Сохранение результата выполнения запроса;
    vSS := TStringStream.Create(vResponse);
    try
      vSS.SaveToFile('response.json');

      // Сохранение файла на ПК;
      vJSON := TJSONObject.ParseJSONValue(vResponse, False, True) as TJSONObject;
      vSS := TStringStream.Create(vJSON.Values['file_data'].Value);
      vSS.SaveToFile('vid.mp4');
    finally
      FreeAndNil(vSS);
    end;
  finally
    FreeAndNil(vIdHttp);
  end;
end;
...
Рейтинг: 0 / 0
Странное поведение Indy (TIdHttp)
    #40097087
KinsT_UA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Странное поведение Indy (TIdHttp)
    #40097088
KinsT_UA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Странное поведение Indy (TIdHttp)
    #40097090
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KinsT_UA
но админы крест на пузе рисуют и говорят, что единственное отличие это то,
что старые сервера распределенные (физически разные), а новые в одном дата-центре и одном облаке.

Хромом проверяешь и отдаешь результат админам. Пусть работу работают, а не кресты рисуют.
...
Рейтинг: 0 / 0
Странное поведение Indy (TIdHttp)
    #40097095
KinsT_UA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman
KinsT_UA
но админы крест на пузе рисуют и говорят, что единственное отличие это то,
что старые сервера распределенные (физически разные), а новые в одном дата-центре и одном облаке.

Хромом проверяешь и отдаешь результат админам. Пусть работу работают, а не кресты рисуют.


В том-то и дело, что из браузера Хром на новом сервере, срабатывает моментально.
Конкретно Инди странно работает :(
Может быть какой-то либы не хватает?
...
Рейтинг: 0 / 0
Странное поведение Indy (TIdHttp)
    #40097097
Softologic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KinsT_UA
wadman
пропущено...

Хромом проверяешь и отдаешь результат админам. Пусть работу работают, а не кресты рисуют.


В том-то и дело, что из браузера Хром на новом сервере, срабатывает моментально.
Конкретно Инди странно работает :(
Может быть какой-то либы не хватает?

Инди она такая... Порой дико глючная, но в целом, да - странная, вне зависимости от версии :)
Лучше уже что то другое выберите. Из бесплатного еще ICS и SYNAPSE есть.
...
Рейтинг: 0 / 0
Странное поведение Indy (TIdHttp)
    #40097114
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Весьма хорош TNetHttpClient, который из коробки
...
Рейтинг: 0 / 0
Странное поведение Indy (TIdHttp)
    #40097117
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asutp2,

+1

TIdHttp - не нужен.
...
Рейтинг: 0 / 0
Странное поведение Indy (TIdHttp)
    #40097145
Softologic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
asutp2
Весьма хорош TNetHttpClient, который из коробки

Кстати, да: https://webdelphi.ru/2019/02/http-client-api-v-delphi/
...
Рейтинг: 0 / 0
Странное поведение Indy (TIdHttp)
    #40097206
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно, сервер не отдает content-length, но на старом сервере рвет коннект, а на новом keep-alive. Вот клиент и ждет у моря погоды. Сравни полный дамп сеансов.
Еще для исключения влияния протокола можно попробовать отправлять запрос через голый сокет.
...
Рейтинг: 0 / 0
Странное поведение Indy (TIdHttp)
    #40097213
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запротоколируйте обмен между Indy и старым сервером и новым сервером. Найдите, в чём разница.
Может редирект какой-нибудь появился.
...
Рейтинг: 0 / 0
Странное поведение Indy (TIdHttp)
    #40097473
KinsT_UA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе утро!

Огромное спасибо всем, кто поучаствовал!

Как писали asutp2, rgreat и Softologic , попробовали TNetHttpClient - работает отлично!
На всякий случай скачал и другие компоненты )

Fr0sT-BrutalВозможно, сервер не отдает content-length, но на старом сервере рвет коннект, а на новом keep-alive. Вот клиент и ждет у моря погоды. Сравни полный дамп сеансов. Чем можно такой дамп отследить? Дайте что-нибудь на почитать об этом, пожалуйста!

DmSerЗапротоколируйте обмен между Indy и старым сервером и новым сервером.Тот же вопрос: чем/как это осуществить?
Мы ставили снифер и пытались пакеты смотреть, по итогу: "очень интересно, но ничего не понял" (ц) :)

DmSerМожет редирект какой-нибудь появился. Доп. редиректов нет. Смотрели через tracert . На новом серваке даже меньше переходов, чем на старом Оо
...
Рейтинг: 0 / 0
Странное поведение Indy (TIdHttp)
    #40097487
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KinsT_UA
Чем можно такой дамп отследить?
Wireshark
KinsT_UA
очень интересно, но ничего не понял
Так смотрите HTTP-заголовки
...
Рейтинг: 0 / 0
Странное поведение Indy (TIdHttp)
    #40097490
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если соединение не через TLS, то SmSniff очень простой и понятный сниффер. Если TLS, то чуть сложнее - Wireshark с установкой их сертификата. Будет много инфы со всех сетевых уровней, но надо искать HTTP команды. Мануалов в сети много
...
Рейтинг: 0 / 0
Странное поведение Indy (TIdHttp)
    #40097508
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal
Wireshark с установкой их сертификата.
О! Он уже умеет https? Не знал.
...
Рейтинг: 0 / 0
Странное поведение Indy (TIdHttp)
    #40097525
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Fr0sT-Brutal
Wireshark с установкой их сертификата.
О! Он уже умеет https? Не знал.


Гениальная штука https!
Вроде всё шифрует, хрен влезешь.
Про при большом желании ставишь свой сертификат и все видно!
...
Рейтинг: 0 / 0
Странное поведение Indy (TIdHttp)
    #40097526
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer
Вроде всё шифрует, хрен влезешь.

В итоге ничего не шифрует. Это как налог на ТКО. Денег собрали, а смысла-то и нет.

Я на телефоне могу посмотреть трафик любого приложения. Будь то хоть банк, хоть еще какое-то "важное" приложение. Да и любой может. Афера мирового масштаба. :)
...
Рейтинг: 0 / 0
Странное поведение Indy (TIdHttp)
    #40097530
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KinsT_UA


DmSerЗапротоколируйте обмен между Indy и старым сервером и новым сервером.


Тот же вопрос: чем/как это осуществить?
Мы ставили снифер и пытались пакеты смотреть, по итогу: "очень интересно, но ничего не понял" (ц) :)


В составе Indy есть компонент для логгирования (вроде TIdLog, но могу ошибаться).
Также есть Handler'ы, в которых можно ловить весь (или почти весь) обмен.

Ещё можно через Fiddler логгировать. В этом случае для IdHTTP нужно указать имя и порт прокси.
Но Fiddler собака сейчас стал платным.
...
Рейтинг: 0 / 0
Странное поведение Indy (TIdHttp)
    #40097585
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_
Fr0sT-Brutal
Wireshark с установкой их сертификата.
О! Он уже умеет https? Не знал.

Да, причем и портабельная версия тоже
DmSer
Гениальная штука https!
Вроде всё шифрует, хрен влезешь.
Про при большом желании ставишь свой сертификат и все видно!

wadman
В итоге ничего не шифрует. Это как налог на ТКО. Денег собрали, а смысла-то и нет.

Всё он шифрует. Но ведь странно как-то иметь непонятный трафик на своей машине и не мочь его посмотреть. И потом, если у клиента есть cert pinning, то хренушки что-то выйдет со сниффингом. Хотя, наверно, можно подменить домен через hosts или DNS, и сделать серт на это доменное имя. Тогда, если клиент не совсем уж паранойный и не проверяет цепочки сертов, может прокатить.

Также, если клиент особо не заморачивается с проверкой, можно сделать простейший TLS=>TLS ретранслятор, который бы писал весь трафик.
...
Рейтинг: 0 / 0
Странное поведение Indy (TIdHttp)
    #40097587
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal
И потом, если у клиента есть cert pinning, то хренушки что-то выйдет со сниффингом

Хочешь сказать, что банковские приложения создают люди, которые не в теме?
Иначе как я смотрю трафик их приложений на телефоне?
...
Рейтинг: 0 / 0
Странное поведение Indy (TIdHttp)
    #40097616
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HTTP Analyzer v7 мне нравиться, а для остального WireShark
...
Рейтинг: 0 / 0
Странное поведение Indy (TIdHttp)
    #40097617
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman
Хочешь сказать, что банковские приложения создают люди, которые не в теме?
Иначе как я смотрю трафик их приложений на телефоне?

Не боги горшки обжигают. Стряпать приложухи тяп-ляп и всех насильно на них пересаживать много ума не надо
...
Рейтинг: 0 / 0
Странное поведение Indy (TIdHttp)
    #40098260
KinsT_UA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Из интересного в продолжение темы :)

Когда попробовали через протокол HTTPS, то всё срабатывает за 1 секунду даже при базовой реализации через Indy.
...
Рейтинг: 0 / 0
Странное поведение Indy (TIdHttp)
    #40098308
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То есть у вас до этого был простой открытый HTTP и ты до сих пор не сравнил дампы запросов?
...
Рейтинг: 0 / 0
Странное поведение Indy (TIdHttp)
    #40098410
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal,

Но виновато конечно же Indy
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Странное поведение Indy (TIdHttp)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]