|
|
|
Indy TIdHttp Get и обрав сети
|
|||
|---|---|---|---|
|
#18+
Во время скачивания данных через IdHttp.Get может произойти обрыв связи. Однако Get никакое исключение и никакую ошибку не выдает при этом. Как узнать, что Get завершился, проработав не до конца, например из-за обрыва связи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 07:47 |
|
||
|
Indy TIdHttp Get и обрав сети
|
|||
|---|---|---|---|
|
#18+
sann-x, ну, заворачиваем в try-except, и порой все же получаем исключения. Но - и нет такого понятия, как "обрыв связи". Пропадание связи может быть вызвано миллионом причин: оборудование, перегрузка, торможения на стороне корреспондента... снижение скорости до 1 бит/мин - это "обрыв"? ... Используешь TIdHttp - значит, считаешь, что связь быть должна. Если связь не "абстрактный конь в вакууме", то используешь или другую библиотеку, или отслеживаешь исключения/задержки руками и, соответственно, выполняешь реконнекты и принимаешь решения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 08:03 |
|
||
|
Indy TIdHttp Get и обрав сети
|
|||
|---|---|---|---|
|
#18+
ъъъъъ sann-x, ну, заворачиваем в try-except, и порой все же получаем исключения. Но - и нет такого понятия, как "обрыв связи". Пропадание связи может быть вызвано миллионом причин: оборудование, перегрузка, торможения на стороне корреспондента... снижение скорости до 1 бит/мин - это "обрыв"? ... Используешь TIdHttp - значит, считаешь, что связь быть должна. Если связь не "абстрактный конь в вакууме", то используешь или другую библиотеку, или отслеживаешь исключения/задержки руками и, соответственно, выполняешь реконнекты и принимаешь решения. Если во время скачивания я отключаю сетевую карту в настройках винды, то исключение не поднимается. Просто завершается Get и ResponseCode возвращает 200. Вот как в этой ситуации понять, была потеря связи или нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 08:07 |
|
||
|
Indy TIdHttp Get и обрав сети
|
|||
|---|---|---|---|
|
#18+
sann-xПросто завершается Get и ResponseCode возвращает 200. Вот как в этой ситуации понять, была потеря связи или нет? , а какая разница , в чем причина неудачи? Запрос не выполнен == связи нет. Ты же не пошлешь юзера восстанавливать оборудование. ... Ну, можешь пинг посылать по адресу/порту, в параллельной нити - какое-то подтверждение, что "та" сторона жива, но это не факт: эхо может прийти, а софт может глюкануть по разным причинам: дедлок, нехватка памяти, отсутствие запрошенного ресурса, перегрузка процессора... Ты для себя определи, что такое "хорошо", например - завершение Get с трех попыток, все остальное считай обрывом связи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 08:50 |
|
||
|
Indy TIdHttp Get и обрав сети
|
|||
|---|---|---|---|
|
#18+
ъъъъъ, Не в этом дело. Я про другое спрашиваю: как понять, что Get нормально завершился или нет? Как понять, что запрос не выполнился, ведь исключение не поднимается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 09:44 |
|
||
|
Indy TIdHttp Get и обрав сети
|
|||
|---|---|---|---|
|
#18+
Мб анализировать Content-Length, если пришло меньше чем положено - ответ не докачался? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 09:48 |
|
||
|
Indy TIdHttp Get и обрав сети
|
|||
|---|---|---|---|
|
#18+
sann-x, точно не глушатся исключения? может в EurekaLog или MadExcept фильтр стоит? или try except выше глотает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 09:51 |
|
||
|
Indy TIdHttp Get и обрав сети
|
|||
|---|---|---|---|
|
#18+
Zelius, Не глушатся. Тестил загрузку на форме по клику. Никаких исключений не поднималось, если я например сетевую карту отключал. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. istrebitel, Тоже так подумал (и сделал), но как-то мне не нравится этот способ. Думал, есть чисто Инди-способы для определения таких ситуаций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 10:00 |
|
||
|
Indy TIdHttp Get и обрав сети
|
|||
|---|---|---|---|
|
#18+
sann-x Если во время скачивания я отключаю сетевую карту в настройках винды, то исключение не поднимается. Просто завершается Get и ResponseCode возвращает 200. Вот как в этой ситуации понять, была потеря связи или нет? А файл точно при этом оборван? Если так, то это баг. Попробуй версию Индей с гитхаба. В крайнем случае можно сверять Content-length ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 10:26 |
|
||
|
Indy TIdHttp Get и обрав сети
|
|||
|---|---|---|---|
|
#18+
Fr0sT-Brutal В крайнем случае можно сверять Content-length Полумера, в общем случае Content-length может отсутствовать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 10:56 |
|
||
|
Indy TIdHttp Get и обрав сети
|
|||
|---|---|---|---|
|
#18+
Дегтярев Евгений, Я проверяю, что если (размер файла больше ноля) И (скачанный размер не равен размеру файла), то что-то пошло не так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 11:40 |
|
||
|
Indy TIdHttp Get и обрав сети
|
|||
|---|---|---|---|
|
#18+
sann-xЯ проверяю, что если (размер файла больше ноля) И (скачанный размер не равен размеру файла), то что-то пошло не так. И, согласно спецификации протокола HTTP, это единственный способ, поскольку закрытие соединения в нём - штатный конец передачи, а 10054 игнорируется из-за тучи кривых реализаций серверов, которые даже соединение правильно завершить не могут. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 12:46 |
|
||
|
Indy TIdHttp Get и обрав сети
|
|||
|---|---|---|---|
|
#18+
sann-x Не глушатся. Тестил загрузку на форме по клику. Никаких исключений не поднималось, если я например сетевую карту отключал. а где в твоем коде except? оберни http.Get('', fl); в try-except ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 14:37 |
|
||
|
Indy TIdHttp Get и обрав сети
|
|||
|---|---|---|---|
|
#18+
X11, дак приложение бы все равно показало окно с исключением. Это раз. А второе: try-except я пробовал - все чисто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 16:39 |
|
||
|
Indy TIdHttp Get и обрав сети
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov sann-xЯ проверяю, что если (размер файла больше ноля) И (скачанный размер не равен размеру файла), то что-то пошло не так. И, согласно спецификации протокола HTTP, это единственный способ, поскольку закрытие соединения в нём - штатный конец передачи, а 10054 игнорируется из-за тучи кривых реализаций серверов, которые даже соединение правильно завершить не могут. даже если и так, следить за этим задача библиотеки, которая его реализует ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 16:42 |
|
||
|
Indy TIdHttp Get и обрав сети
|
|||
|---|---|---|---|
|
#18+
09.10.2020 16:42, Дегтярев Евгений пишет: > даже если и так, следить за этим задача библиотеки, которая его реализует индюки отнюдь не эталон Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 16:44 |
|
||
|
Indy TIdHttp Get и обрав сети
|
|||
|---|---|---|---|
|
#18+
Дегтярев Евгений Dimitry Sibiryakov пропущено... И, согласно спецификации протокола HTTP, это единственный способ, поскольку закрытие соединения в нём - штатный конец передачи, а 10054 игнорируется из-за тучи кривых реализаций серверов, которые даже соединение правильно завершить не могут. даже если и так, следить за этим задача библиотеки, которая его реализует Инди - это делфийский позор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 16:50 |
|
||
|
Indy TIdHttp Get и обрав сети
|
|||
|---|---|---|---|
|
#18+
Мимопроходящий, я и намякиваю что либа не делает чего должна ps я хз как она там устроена, но для меня эталон что-то типа отправил запрос, если пришли заголовки - запрос выполнен, есть тело ответа - читаем тело и EOF мне должна вернуть либа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 16:52 |
|
||
|
Indy TIdHttp Get и обрав сети
|
|||
|---|---|---|---|
|
#18+
Дегтярев Евгений запрос выполнен, есть тело ответа - читаем тело и EOF мне должна вернуть либа. примерно так Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 17:08 |
|
||
|
Indy TIdHttp Get и обрав сети
|
|||
|---|---|---|---|
|
#18+
Дегтярев Евгений Полумера, в общем случае Content-length может отсутствовать В самом деле, почитал - так и есть, если Transfer-Encoding указан ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 17:34 |
|
||
|
Indy TIdHttp Get и обрав сети
|
|||
|---|---|---|---|
|
#18+
Дегтярев Евгенийесли пришли заголовки - запрос выполнен Ну так автор и получает 200: "всё нормально, запрос выполнен". Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 17:37 |
|
||
|
Indy TIdHttp Get и обрав сети
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Дегтярев Евгенийесли пришли заголовки - запрос выполнен Ну так автор и получает 200: "всё нормально, запрос выполнен". как я понял у ТС проблемы начинаются потом... с его слов далее надо рукаме анализировать все ли он высосал из сети или нет, опираясь на заголовок длинны... а если там чанкед или гзип... а мож сервер умеет http2 и я как пользователь не хочу во все это вникать (до поры до времени) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 20:57 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=40006836&tid=2037946]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
41ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 198ms |
| total: | 310ms |

| 0 / 0 |
