powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Indy TIdHttp Get и обрав сети
22 сообщений из 22, страница 1 из 1
Indy TIdHttp Get и обрав сети
    #40006806
Фотография sann-x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во время скачивания данных через IdHttp.Get может произойти обрыв связи. Однако Get никакое исключение и никакую ошибку не выдает при этом. Как узнать, что Get завершился, проработав не до конца, например из-за обрыва связи?
...
Рейтинг: 0 / 0
Indy TIdHttp Get и обрав сети
    #40006810
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sann-x,
ну, заворачиваем в try-except, и порой все же получаем исключения.
Но - и нет такого понятия, как "обрыв связи". Пропадание связи может быть вызвано миллионом причин: оборудование, перегрузка, торможения на стороне корреспондента... снижение скорости до 1 бит/мин - это "обрыв"?
...
Используешь TIdHttp - значит, считаешь, что связь быть должна. Если связь не "абстрактный конь в вакууме", то используешь или другую библиотеку, или отслеживаешь исключения/задержки руками и, соответственно, выполняешь реконнекты и принимаешь решения.
...
Рейтинг: 0 / 0
Indy TIdHttp Get и обрав сети
    #40006811
Фотография sann-x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
sann-x,
ну, заворачиваем в try-except, и порой все же получаем исключения.
Но - и нет такого понятия, как "обрыв связи". Пропадание связи может быть вызвано миллионом причин: оборудование, перегрузка, торможения на стороне корреспондента... снижение скорости до 1 бит/мин - это "обрыв"?
...
Используешь TIdHttp - значит, считаешь, что связь быть должна. Если связь не "абстрактный конь в вакууме", то используешь или другую библиотеку, или отслеживаешь исключения/задержки руками и, соответственно, выполняешь реконнекты и принимаешь решения.

Если во время скачивания я отключаю сетевую карту в настройках винды, то исключение не поднимается. Просто завершается Get и ResponseCode возвращает 200. Вот как в этой ситуации понять, была потеря связи или нет?
...
Рейтинг: 0 / 0
Indy TIdHttp Get и обрав сети
    #40006817
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sann-xПросто завершается Get и ResponseCode возвращает 200. Вот как в этой ситуации понять, была потеря связи или нет?
, а какая разница
, в чем причина неудачи?
Запрос не выполнен == связи нет.
Ты же не пошлешь юзера восстанавливать оборудование.
...
Ну, можешь пинг посылать по адресу/порту, в параллельной нити - какое-то подтверждение, что "та" сторона жива, но это не факт: эхо может прийти, а софт может глюкануть по разным причинам: дедлок, нехватка памяти, отсутствие запрошенного ресурса, перегрузка процессора...
Ты для себя определи, что такое "хорошо", например - завершение Get с трех попыток, все остальное считай обрывом связи.
...
Рейтинг: 0 / 0
Indy TIdHttp Get и обрав сети
    #40006832
Фотография sann-x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,

Не в этом дело. Я про другое спрашиваю: как понять, что Get нормально завершился или нет? Как понять, что запрос не выполнился, ведь исключение не поднимается?
...
Рейтинг: 0 / 0
Indy TIdHttp Get и обрав сети
    #40006833
istrebitel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мб анализировать Content-Length, если пришло меньше чем положено - ответ не докачался?
...
Рейтинг: 0 / 0
Indy TIdHttp Get и обрав сети
    #40006835
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sann-x,

точно не глушатся исключения? может в EurekaLog или MadExcept фильтр стоит? или try except выше глотает?
...
Рейтинг: 0 / 0
Indy TIdHttp Get и обрав сети
    #40006836
Фотография sann-x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zelius,

Не глушатся. Тестил загрузку на форме по клику. Никаких исключений не поднималось, если я например сетевую карту отключал.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
procedure TForm1.Button1Click(Sender: TObject);
var
  http: TIdHTTP;
  fl: TFileStream;
begin
  http := TIdHTTP.Create(Self);
  try
    fl := TFileStream.Create('somefile.txt', fmCreate);
    try
      //http.HTTPOptions := http.HTTPOptions - [hoNoProtocolErrorException]; // Это не помогает
      //http.HTTPOptions := http.HTTPOptions + [hoNoProtocolErrorException]; // И это не помогает
      http.OnWork := HttpProgress;
      http.OnStatus := StatusEvent;
      http.Get('https://somesite.com/somefile.txt', fl);
      Memo1.Lines.Add(http.ResponseCode.ToString);
    finally
      fl.Free;
    end;
  finally
    http.Free;
  end;
end;



istrebitel,

Тоже так подумал (и сделал), но как-то мне не нравится этот способ. Думал, есть чисто Инди-способы для определения таких ситуаций.
...
Рейтинг: 0 / 0
Indy TIdHttp Get и обрав сети
    #40006844
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sann-x
Если во время скачивания я отключаю сетевую карту в настройках винды, то исключение не поднимается. Просто завершается Get и ResponseCode возвращает 200. Вот как в этой ситуации понять, была потеря связи или нет?

А файл точно при этом оборван?
Если так, то это баг. Попробуй версию Индей с гитхаба.
В крайнем случае можно сверять Content-length
...
Рейтинг: 0 / 0
Indy TIdHttp Get и обрав сети
    #40006853
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal
В крайнем случае можно сверять Content-length

Полумера, в общем случае Content-length может отсутствовать
...
Рейтинг: 0 / 0
Indy TIdHttp Get и обрав сети
    #40006867
Фотография sann-x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дегтярев Евгений,

Я проверяю, что если (размер файла больше ноля) И (скачанный размер не равен размеру файла), то что-то пошло не так.
...
Рейтинг: 0 / 0
Indy TIdHttp Get и обрав сети
    #40006895
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sann-xЯ проверяю, что если (размер файла больше ноля) И (скачанный размер не равен размеру
файла), то что-то пошло не так.

И, согласно спецификации протокола HTTP, это единственный способ, поскольку закрытие
соединения в нём - штатный конец передачи, а 10054 игнорируется из-за тучи кривых
реализаций серверов, которые даже соединение правильно завершить не могут.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Indy TIdHttp Get и обрав сети
    #40006958
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sann-x
Не глушатся. Тестил загрузку на форме по клику. Никаких исключений не поднималось, если я например сетевую карту отключал.


а где в твоем коде except?

оберни http.Get('', fl); в try-except
...
Рейтинг: 0 / 0
Indy TIdHttp Get и обрав сети
    #40007017
Фотография sann-x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

дак приложение бы все равно показало окно с исключением. Это раз. А второе: try-except я пробовал - все чисто.
...
Рейтинг: 0 / 0
Indy TIdHttp Get и обрав сети
    #40007018
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

sann-xЯ проверяю, что если (размер файла больше ноля) И (скачанный размер не равен размеру
файла), то что-то пошло не так.

И, согласно спецификации протокола HTTP, это единственный способ, поскольку закрытие
соединения в нём - штатный конец передачи, а 10054 игнорируется из-за тучи кривых
реализаций серверов, которые даже соединение правильно завершить не могут.

даже если и так, следить за этим задача библиотеки, которая его реализует
...
Рейтинг: 0 / 0
Indy TIdHttp Get и обрав сети
    #40007022
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
09.10.2020 16:42, Дегтярев Евгений пишет:
> даже если и так, следить за этим задача библиотеки, которая его реализует

индюки отнюдь не эталон
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Indy TIdHttp Get и обрав сети
    #40007025
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дегтярев Евгений
Dimitry Sibiryakov

пропущено...

И, согласно спецификации протокола HTTP, это единственный способ, поскольку закрытие
соединения в нём - штатный конец передачи, а 10054 игнорируется из-за тучи кривых
реализаций серверов, которые даже соединение правильно завершить не могут.

даже если и так, следить за этим задача библиотеки, которая его реализует

Инди - это делфийский позор.
...
Рейтинг: 0 / 0
Indy TIdHttp Get и обрав сети
    #40007026
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

я и намякиваю что либа не делает чего должна

ps
я хз как она там устроена, но для меня эталон что-то типа отправил запрос, если пришли заголовки - запрос выполнен, есть тело ответа - читаем тело и EOF мне должна вернуть либа.
...
Рейтинг: 0 / 0
Indy TIdHttp Get и обрав сети
    #40007029
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дегтярев Евгений
запрос выполнен, есть тело ответа - читаем тело и EOF мне должна вернуть либа.

примерно так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
    try
      S := IdHTTP2.Get(DestURL);
      ResponseCode := IdHTTP2.ResponseCode;
      ResponseText := IdHTTP2.ResponseText;
      if ResponseCode = 200 then
        begin
          SL.Text := S;
          for i := 0 to SL.Count - 1 do
            if Pos(AnsiUpperCase(FileName), AnsiUpperCase(SL[i])) > 0 then
              begin
                Result := true;
                FileDate := ExtractFileDate(AnsiUpperCase(FileName), AnsiUpperCase(trim(SL[i])));
                Exit;
              end;
        end;
    except
      on E: Exception do
        begin
          ResponseCode := GetLastError;
          ResponseText := SysErrorMessage(ResponseCode) + #13#10 + E.Message;
        end;
    end;

...
Рейтинг: 0 / 0
Indy TIdHttp Get и обрав сети
    #40007041
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дегтярев Евгений
Полумера, в общем случае Content-length может отсутствовать

В самом деле, почитал - так и есть, если Transfer-Encoding указан
...
Рейтинг: 0 / 0
Indy TIdHttp Get и обрав сети
    #40007043
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дегтярев Евгенийесли пришли заголовки - запрос выполнен

Ну так автор и получает 200: "всё нормально, запрос выполнен".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Indy TIdHttp Get и обрав сети
    #40007125
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Дегтярев Евгенийесли пришли заголовки - запрос выполнен

Ну так автор и получает 200: "всё нормально, запрос выполнен".

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


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