Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.02.2015, 12:44   #1
Milkynder
 
Регистрация: 05.02.2015
Сообщений: 5
По умолчанию Нет ответа от сервера на запрос HTTP, снифер показывает Request is not completed. waiting...

Пишу простое приложение, которое использует indy10. В потоке работает idhttp клиент и посылает post запросы на сервер, обрабатывает ответы. В общем все хорошо, но периодически программа стала зависать, нет отклика от потока, снифер показал что по непонятным причинам один и тот же запрос может поставить indy (или сервер) в тупик - Request is not completed. waiting... , вроде как запрос ушел, а ответа от сервера нет или он просто бесконечный. Уже была похожая тема, но ответа так и не было. С этой проблемой часто сталкиваюсь в использовании Indy. ReadTimeout и ConnectTimeout выставлены и если есть ошибка таймаута - прекрасно, я хоть могу ее обработать, а тут и ни ошибки, ни движения, нужна помощь. Если нужен код то
Код:
 list:=tstringlist.create;
 list.Add('frend=myfrend');
 html:= http.post('http://site.ru',list);
Короче хочу сказать что от содержания запроса не зависит, ошибка возникает периодически, закономерности не обнаружил, может на 2м запросе появится, а может и через 300.

Последний раз редактировалось Stilet; 27.02.2015 в 22:35.
Milkynder вне форума Ответить с цитированием
Старый 27.02.2015, 22:02   #2
LiteCrew
Новичок
Джуниор
 
Регистрация: 21.07.2013
Сообщений: 2
По умолчанию

Все помешались на Indy ...
Очень советую установить Synapse и у вас будет возникать намного меньше вопросов,да и пользоваться указанной либой намного проще.
По-поводу проблемы - данный глюк присутствует уже не в первой версии инди,как и когда они исправят ,пока остается тайной.
Ну и маленький пример,если вдруг понадобится:
В uses добавляем httpsend
Прописываем в переменных HTTP: THTTPSend; (HTTP можете заменить,на всё ,что душе угодно)
Далее,для примера возьмём клик по кнопке,с помощью которого будем слать пост запрос.
Код:
http:=thttpsend.Create; //Создаем экземпляр клиента Synapse
Data:=tstringlist.Create;
Data.Add('frend=myfrend')

HTTP.Document.LoadFromStream(Data); //Подгружаем данные,загруженные в Data
HTTP.HttpMethod('POST',http://site.ru'); //Отправляем запрос

Последний раз редактировалось LiteCrew; 27.02.2015 в 23:21.
LiteCrew вне форума Ответить с цитированием
Старый 27.02.2015, 22:38   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
один и тот же запрос может поставить indy (или сервер) в тупик - Request is not completed. waiting...
Так а все же? может сервер не успевает твой запрос обработать, или у наго стоит защита от таких... дидиосов как делает твоя программа? Насколько часто запросы уходят?
Цитата:
Очень советую установить Synapse и у вас будет возникать намного меньше вопросов
Ой, я вас таки умоляю...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.03.2015, 15:57   #4
Milkynder
 
Регистрация: 05.02.2015
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Так а все же? может сервер не успевает твой запрос обработать, или у наго стоит защита от таких... дидиосов как делает твоя программа? Насколько часто запросы уходят?

Ой, я вас таки умоляю...
Запросы уходят довольно часто, сервер однозначно запрос обработать успевает... насчет защиты сервера буду думать... но тогда бы хоть какая-то закономерность была бы у него, через N запросов и/или T времени, а тут ведь может работать без проблем, а может зависнуть без причины... Кроме того таймауты выставлены и они ловятся, но вот возникают такие ситуации когда и время вышло и таймаут не вернулся и ответа от сервера нет...

Последний раз редактировалось Milkynder; 02.03.2015 в 16:38.
Milkynder вне форума Ответить с цитированием
Старый 02.03.2015, 18:12   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
через N запросов и/или T времени
Ну я бы не назвал это показателем...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.03.2015, 12:19   #6
Milkynder
 
Регистрация: 05.02.2015
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ну я бы не назвал это показателем...
Согласен, и пусть сервак забивает на мои запросы, я не обижусь подожду и спрошу снова, меня бы вполне удовлетворило если при этом возникала ошибка "таймаута" и ее можно было бы поймать и обработать, ведь если сервер не отвечает или не доступен или превышен интервал ожидания, должна же быть ошибка... а клиент просто висит и ждет бесконечно... Есть конечно особенность: запрос идет в отдельном потоке (сразу оговорюсь - не несколько потоков с одинаковыми запросами, а цикл в одном потоке). Есть мысли?
Milkynder вне форума Ответить с цитированием
Старый 04.03.2015, 23:46   #7
Smagulov85
Форумчанин
 
Аватар для Smagulov85
 
Регистрация: 22.11.2009
Сообщений: 142
По умолчанию

Цитата:
Сообщение от LiteCrew Посмотреть сообщение

Все помешались на Indy ...
Я скажу, что у меня нет проблем с indy вообще не каких. (да глюченый, но работает)

Цитата:
Сообщение от LiteCrew Посмотреть сообщение
Очень советую установить Synapse и у вас будет возникать намного меньше вопросов
Synapse тоже не панацея...... не пользовался им не когда им и не собираюсь. Просто руки надо прямые иметь.


-----------

По поводу пустого ответа POST скажу так...

90% что вы отправляете не полные данные. Сделайте обработчик ошибок и посмотрите, что Вам пишут. Какой код ответа показывает сниффер?
Если помог: Нажми Весы и оставь отзыв!!!
Smagulov85 вне форума Ответить с цитированием
Старый 05.03.2015, 07:47   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
90% что вы отправляете не полные данные.
Нет. Дело не в этом.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.03.2015, 16:21   #9
Smagulov85
Форумчанин
 
Аватар для Smagulov85
 
Регистрация: 22.11.2009
Сообщений: 142
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Нет. Дело не в этом.
могу ошибаться.... надо сайт тогда скажу
Если помог: Нажми Весы и оставь отзыв!!!
Smagulov85 вне форума Ответить с цитированием
Старый 06.03.2015, 09:52   #10
Milkynder
 
Регистрация: 05.02.2015
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Так а все же? может сервер не успевает твой запрос обработать, или у наго стоит защита от таких... дидиосов как делает твоя программа? Насколько часто запросы уходят?
В моем случае Stilet оказался прав, действительно похоже была защита, изменил алгоритм запросов, увеличил между ними задержку и зависать перестали. Post запросы были полными, но вопрос остается открытым, пусть даже в данном случае когда запрос вот так игнорированием отбривает сам сервер, как его обработать, ведь никаких ошибок не возникает, он просто бесконечно ждет.Smagulov85 снифер при этом ничего не показывает, ушел запрос и все, от сервера нет ничего, совсем ничего, ни ошибки, ни какого ответа. Я так понимаю для таких случаев в инди есть параметры таймаутов и они срабатывают (проверено), но не в этом случае.
Milkynder вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нет ответа от почтового сервера kirsanv43 C/C++ Сетевое программирование 2 29.10.2013 20:22
HTTP/S Снифер EliteDeN Общие вопросы Delphi 0 27.10.2013 22:08
HTTP снифер для многопоточного приложения bakanaev Общие вопросы Delphi 3 06.05.2013 14:21
Http Server request toxich Работа с сетью в Delphi 0 07.01.2012 17:46
HTTP снифер на делфи codekick Работа с сетью в Delphi 0 25.07.2010 23:28