Ошибка при отправки нескольких GET-запросов
От: Paco  
Дата: 11.09.02 10:39
Оценка:
При отправке в цикле нескольких GET-запросов выдается ошибка Connection Failed. В сети все работает нормально, как только запускаю через модем, несколько запросов выполняются, и вылетает ошибка.

for (int i = 0; i < 10; i++) {
NMHTTP1->Get(GetArr[i]);
}
Re: Ошибка при отправки нескольких GET-запросов
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 11.09.02 11:00
Оценка:
Здравствуйте Paco, Вы писали:

P>При отправке в цикле нескольких GET-запросов выдается ошибка Connection Failed. В сети все работает нормально, как только запускаю через модем, несколько запросов выполняются, и вылетает ошибка.


P>for (int i = 0; i < 10; i++) {

P> NMHTTP1->Get(GetArr[i]);
P> }

Компонент NMHTTP — суть глюкавый, кривой и страшный Лучше его не юзать — в первом приближении, чем бороться с чужими ошибками, проце набросать свой маленький кусочек кода и бороться со своими В GET-запросе ничего экстраординарного и сложного нет.
Re[2]: Ошибка при отправки нескольких GET-запросов
От: Anatolix Россия https://www.linkedin.com/in/anatolix/
Дата: 11.09.02 12:16
Оценка:
Здравствуйте Flamer, Вы писали:

F>Компонент NMHTTP — суть глюкавый, кривой и страшный Лучше его не юзать — в первом приближении, чем бороться с чужими ошибками, проце набросать свой маленький кусочек кода и бороться со своими В GET-запросе ничего экстраординарного и сложного нет.


А еще лучше INDY пользоваться в BCB6/D6 они стали основными Internet компонентами, а в BCB5/D5 их можно поставить скачав с www.nevrona.com/indy
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Re[3]: Ошибка при отправки нескольких GET-запросов
От: Paco  
Дата: 12.09.02 05:38
Оценка:
Здравствуйте Anatolix, Вы писали:

A>Здравствуйте Flamer, Вы писали:


F>>Компонент NMHTTP — суть глюкавый, кривой и страшный Лучше его не юзать — в первом приближении, чем бороться с чужими ошибками, проце набросать свой маленький кусочек кода и бороться со своими В GET-запросе ничего экстраординарного и сложного нет.


A>А еще лучше INDY пользоваться в BCB6/D6 они стали основными Internet компонентами, а в BCB5/D5 их можно поставить скачав с www.nevrona.com/indy


C компонентами Indy другая проблема. Если при GET-запросе появляется ошибка типа 404, 403 , то вылетает MessageBox, а ставить try не хочеться.
Re[4]: Ошибка при отправки нескольких GET-запросов
От: Anatolix Россия https://www.linkedin.com/in/anatolix/
Дата: 12.09.02 05:44
Оценка:
Здравствуйте Paco, Вы писали:

P>C компонентами Indy другая проблема. Если при GET-запросе появляется ошибка типа 404, 403 , то вылетает MessageBox, а ставить try не хочеться.


Религия не позволяет?
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Re[5]: Ошибка при отправки нескольких GET-запросов
От: Paco  
Дата: 12.09.02 06:36
Оценка:
Здравствуйте Anatolix, Вы писали:

A>Здравствуйте Paco, Вы писали:


P>>C компонентами Indy другая проблема. Если при GET-запросе появляется ошибка типа 404, 403 , то вылетает MessageBox, а ставить try не хочеться.


A>Религия не позволяет?


С религией все нормально. Сначала программа писалась на Indy-компонентах, но когда запускаешь пачку запросов, и половина из них не отвечает... упатеешь жать кнопку ОК. Если знаешь как отключить вывод этих Messag'ей "скажи мне как?"
Re[6]: Ошибка при отправки нескольких GET-запросов
От: Anatolix Россия https://www.linkedin.com/in/anatolix/
Дата: 12.09.02 07:09
Оценка:
Здравствуйте Paco, Вы писали:

P>Здравствуйте Anatolix, Вы писали:


P>С религией все нормально. Сначала программа писалась на Indy-компонентах, но когда запускаешь пачку запросов, и половина из них не отвечает... упатеешь жать кнопку ОК. Если знаешь как отключить вывод этих Messag'ей "скажи мне как?"


Ну во первых я не понимаю почему ты боишься try/catch — это правильный метод, так и надо делать. Но если ты хочешь хак который отключает демонтрацию exception-ов в программе то на:

ставишь на форму ApplicationEvents, определяешь у него событие OnException, ставишь в нем комментарий чтобы его не стерло, и ничего в нем не делаешь.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Re[7]: Ошибка при отправки нескольких GET-запросов
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 12.09.02 07:20
Оценка:
Здравствуйте Anatolix, Вы писали:

A>Здравствуйте Paco, Вы писали:


P>>Здравствуйте Anatolix, Вы писали:



[skipped]

A>ставишь на форму ApplicationEvents, определяешь у него событие OnException, ставишь в нем комментарий чтобы его не стерло, и ничего в нем не делаешь.


Многоуважаемый Anatolix! Знаете, как называется такой подход к решению задачи? Гланды резать через @опу, извините... Без обид. Я уже писал, сторонние компоненты (NM***, Indy) — это _достаточная_ концентрация фич в одном отдельно взятом куске кода. Хотите лишнего геморроя? Пожалуйста! Давайте прикрутим ApplicationEvents, потом еще чего... И так до бесконечности... Это мне напоминает желание человека заставить свой "Запорожец" летать — уж он и крылья поставил — не летит, собака. Он уже и мотор туда реактивный присобачил — взлетел... на воздух. Но ведь он ни разу не задумался о том, что "Запор" не приспособлен для полетов!

З.Ы. Можете со мной спорить, но мне кажется, что леность — первый путь к поиску компонент, путь, в 80% случаев только добавляющий проблем. А что касается того-самого получения страницы GET-запросом, то это навскидку около 100 строк кода — не так много, правда?

З.З.Ы. Я ни в коем случае не ставлю самоцелью "делать все ручками". Все зависит от задачи... ИМХО. Спасибо за внимание.
Re[8]: Ошибка при отправки нескольких GET-запросов
От: Paco  
Дата: 12.09.02 08:09
Оценка:
Здравствуйте Flamer, Вы писали:

F>Здравствуйте Anatolix, Вы писали:


A>>Здравствуйте Paco, Вы писали:


P>>>Здравствуйте Anatolix, Вы писали:


F>

F>[skipped]

A>>ставишь на форму ApplicationEvents, определяешь у него событие OnException, ставишь в нем комментарий чтобы его не стерло, и ничего в нем не делаешь.


F>Многоуважаемый Anatolix! Знаете, как называется такой подход к решению задачи? Гланды резать через @опу, извините... Без обид. Я уже писал, сторонние компоненты (NM***, Indy) — это _достаточная_ концентрация фич в одном отдельно взятом куске кода. Хотите лишнего геморроя? Пожалуйста! Давайте прикрутим ApplicationEvents, потом еще чего... И так до бесконечности... Это мне напоминает желание человека заставить свой "Запорожец" летать — уж он и крылья поставил — не летит, собака. Он уже и мотор туда реактивный присобачил — взлетел... на воздух. Но ведь он ни разу не задумался о том, что "Запор" не приспособлен для полетов!


F>З.Ы. Можете со мной спорить, но мне кажется, что леность — первый путь к поиску компонент, путь, в 80% случаев только добавляющий проблем. А что касается того-самого получения страницы GET-запросом, то это навскидку около 100 строк кода — не так много, правда?


F>З.З.Ы. Я ни в коем случае не ставлю самоцелью "делать все ручками". Все зависит от задачи... ИМХО. Спасибо за внимание.


Спасибо за дискуссию. Вероятнее всего воспользуюсь try/catch. Хотя если кто подскажет как делаются Get без использования компонентов (Indy, ICS, FastNet и т.д.) буду очень признателен.
Re[8]: Ошибка при отправки нескольких GET-запросов
От: Anatolix Россия https://www.linkedin.com/in/anatolix/
Дата: 12.09.02 09:09
Оценка:
Здравствуйте Flamer, Вы писали:

F>Многоуважаемый Anatolix! Знаете, как называется такой подход к решению задачи? Гланды резать через @опу, извините... Без обид. Я уже писал, сторонние компоненты (NM***, Indy) — это _достаточная_ концентрация фич в одном отдельно взятом куске кода. Хотите лишнего геморроя? Пожалуйста!


Могу тебя обрабовать что сейчас все в Delphi завязано на Indy. На нах теперь сделаны Web сервисы и вообще все сетевые фишкит Borland. Так что на счет сторонних компонент ты маленько опоздал. INDY это часть VCL и неотъемлемая часть CLX

Давайте прикрутим ApplicationEvents, потом еще чего...

Я согласен что это решение череж зопу. Но я так и сказал человеку который меня попросил его дать.
try/catch это правильное решение в этом случае.

F>З.Ы. Можете со мной спорить, но мне кажется, что леность — первый путь к поиску компонент, путь, в 80% случаев только добавляющий проблем. А что касается того-самого получения страницы GET-запросом, то это навскидку около 100 строк кода — не так много, правда?


Правда? А ты это писал руками? Я вот писал, (на плюсах под unix, так что INDY поюзать не мог) могу тебя уверить, что твоя вера в 100 строк кода продлится ровно до того момента как придется сделать что-то сложное, например получить ее POST запросом. Ты представляешь например как параметры посылаются по http в multipart/form-data?

Вообщем что бы ты не говорил INDY это самые лучшие компоненты которые есть, они значительно превосходят многие аналогичные библиотеки для C++. И очень много продуктов их юзает можешь посмотреть список на их сайте. Вообщем они rulez, и они гораздо менее глюкавые чем, например, сама борландовская VCL.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Re[9]: Ошибка при отправки нескольких GET-запросов
От: Paco  
Дата: 12.09.02 10:05
Оценка:
Здравствуйте Anatolix, Вы писали:

A>Здравствуйте Flamer, Вы писали:


F>>Многоуважаемый Anatolix! Знаете, как называется такой подход к решению задачи? Гланды резать через @опу, извините... Без обид. Я уже писал, сторонние компоненты (NM***, Indy) — это _достаточная_ концентрация фич в одном отдельно взятом куске кода. Хотите лишнего геморроя? Пожалуйста!


A>Могу тебя обрабовать что сейчас все в Delphi завязано на Indy. На нах теперь сделаны Web сервисы и вообще все сетевые фишкит Borland. Так что на счет сторонних компонент ты маленько опоздал. INDY это часть VCL и неотъемлемая часть CLX


A>Давайте прикрутим ApplicationEvents, потом еще чего...


A>Я согласен что это решение череж зопу. Но я так и сказал человеку который меня попросил его дать.

A>try/catch это правильное решение в этом случае.

F>>З.Ы. Можете со мной спорить, но мне кажется, что леность — первый путь к поиску компонент, путь, в 80% случаев только добавляющий проблем. А что касается того-самого получения страницы GET-запросом, то это навскидку около 100 строк кода — не так много, правда?


A>Правда? А ты это писал руками? Я вот писал, (на плюсах под unix, так что INDY поюзать не мог) могу тебя уверить, что твоя вера в 100 строк кода продлится ровно до того момента как придется сделать что-то сложное, например получить ее POST запросом. Ты представляешь например как параметры посылаются по http в multipart/form-data?


A>Вообщем что бы ты не говорил INDY это самые лучшие компоненты которые есть, они значительно превосходят многие аналогичные библиотеки для C++. И очень много продуктов их юзает можешь посмотреть список на их сайте. Вообщем они rulez, и они гораздо менее глюкавые чем, например, сама борландовская VCL.


Основная загвоздка состоит скорее всего не в компонентах, а в соединении. Т.е. в 100Мb сети все пакеты успевают обрабатываться до того, как я пошлю следующий. А при соединении через модем GET не успевает обрабатываться (как мне кажеться). Потому что велезают сообщения Connection Failed и типа "Сокет не готов"... Поэтому главный вопрос — как узнать когда соединение готово?
Re[10]: Ошибка при отправки нескольких GET-запросов
От: Anatolix Россия https://www.linkedin.com/in/anatolix/
Дата: 12.09.02 14:11
Оценка:
Здравствуйте Paco, Вы писали:

P>Основная загвоздка состоит скорее всего не в компонентах, а в соединении. Т.е. в 100Мb сети все пакеты успевают обрабатываться до того, как я пошлю следующий. А при соединении через модем GET не успевает обрабатываться (как мне кажеться). Потому что велезают сообщения Connection Failed и типа "Сокет не готов"... Поэтому главный вопрос — как узнать когда соединение готово?


Нет это бред. Дело не в пакетах. Пакеты работают как надо, об этом подумали люди задолго до тебя.
Все должно работать. Код в студию.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Re[11]: Ошибка при отправки нескольких GET-запросов
От: Paco  
Дата: 13.09.02 05:31
Оценка:
Здравствуйте Anatolix, Вы писали:

A>Здравствуйте Paco, Вы писали:


P>>Основная загвоздка состоит скорее всего не в компонентах, а в соединении. Т.е. в 100Мb сети все пакеты успевают обрабатываться до того, как я пошлю следующий. А при соединении через модем GET не успевает обрабатываться (как мне кажеться). Потому что велезают сообщения Connection Failed и типа "Сокет не готов"... Поэтому главный вопрос — как узнать когда соединение готово?


A>Нет это бред. Дело не в пакетах. Пакеты работают как надо, об этом подумали люди задолго до тебя.

A>Все должно работать. Код в студию.

Код тривиально прост:

IdHTTP1->Host = ComboBox1->Text;
for (int i=0; i<MaxResp; i++) {
IdHTTP1->Get(RespArr[i])
// Далее обработка результатов
RichEdit1->Lines->Add(RespArr[i]+" "+IntToStr(IdHTTP1->ResponseCode)));
}


Есть идея. Такие глюки появляются после того, как приходит ошибка 403, т.е. в доступе отказанно, а копаясь в msdn я наткнулся на такой тест, что Connection Failed возникает когда было отказанно в доступе (правда это относилось к Visual Database Tools). Но базы данных тоже наверняка используют TCP/IP.
Re[12]: Ошибка при отправки нескольких GET-запросов
От: Anatolix Россия https://www.linkedin.com/in/anatolix/
Дата: 13.09.02 05:43
Оценка:
Здравствуйте Paco, Вы писали:

P>Код тривиально прост:


IdHTTP1->>Host = ComboBox1->Text;
P> for (int i=0; i<MaxResp; i++) {
P> IdHTTP1->Get(RespArr[i])
P> // Далее обработка результатов
P> RichEdit1->Lines->Add(RespArr[i]+" "+IntToStr(IdHTTP1->ResponseCode)));
P> }

Дак вот так его переделай

IdHTTP1->>Host = ComboBox1->Text;
 for (int i=0; i<MaxResp; i++)  {
  try
  { 
    IdHTTP1->Get(RespArr[i])
  }
  catch(...)
  {
  }
  // Далее обработка результатов
  RichEdit1->Lines->Add(RespArr[i]+" "+IntToStr(IdHTTP1->ResponseCode)));
 }



P>

P>Есть идея. Такие глюки появляются после того, как приходит ошибка 403, т.е. в доступе отказанно

Это помоему не ошибка а нормальная реакция INDY, на то что она не может взять документ
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Re[13]: Ошибка при отправки нескольких GET-запросов
От: Paco  
Дата: 13.09.02 06:41
Оценка:
Здравствуйте Anatolix, Вы писали:

A>Здравствуйте Paco, Вы писали:


P>>Код тривиально прост:


IdHTTP1->>>Host = ComboBox1->Text;
P>> for (int i=0; i<MaxResp; i++) {
P>> IdHTTP1->Get(RespArr[i])
P>> // Далее обработка результатов
P>> RichEdit1->Lines->Add(RespArr[i]+" "+IntToStr(IdHTTP1->ResponseCode)));
P>> }

A>Дак вот так его переделай


A>
IdHTTP1->>>Host = ComboBox1->Text;
A> for (int i=0; i<MaxResp; i++)  {
A>  try
A>  { 
A>    IdHTTP1->Get(RespArr[i])
A>  }
A>  catch(...)
A>  {
A>  }
A>  // Далее обработка результатов
A>  RichEdit1->Lines->Add(RespArr[i]+" "+IntToStr(IdHTTP1->ResponseCode)));
A> }
A>


A>

P>>
P>>Есть идея. Такие глюки появляются после того, как приходит ошибка 403, т.е. в доступе отказанно

A>Это помоему не ошибка а нормальная реакция INDY, на то что она не может взять документ


Абсолютно так и сделал. Остается вопрос как работать кагда появиться сообщение 403, и не нашел параметра TimeOut.
Re[14]: Ошибка при отправки нескольких GET-запросов
От: Anatolix Россия https://www.linkedin.com/in/anatolix/
Дата: 13.09.02 10:22
Оценка:
Здравствуйте Paco, Вы писали:

A>>Это помоему не ошибка а нормальная реакция INDY, на то что она не может взять документ

P>Абсолютно так и сделал. Остается вопрос как работать кагда появиться сообщение 403, и не нашел параметра TimeOut.

А что она делает по 403? Что то особое? Ну поймаешь exception и продолжишь.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.