Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.06;
Скачать: CL | DM;

Вниз

TidHttp в цикле после неудачного запроса больше не конектится   Найти похожие ветки 

 
Grin ©   (2003-01-14 15:59) [0]

Цикл
...
1 try
2 AssignFile(B, "htm.txt");
3 Rewrite(B);
4 WriteLn(B,HTTP.Get(url);
5 CloseFile(B);
6 except
7 Memo1.Text := "No conection";
8 LbNCCount.Caption:= IntToStr(c);
9 end;
...

После неудачи в 4-й строке до конца цикла каждый раз вылетает в эксершн стр6.
Вопрос:
Как правильно обойти неудачу в 4-й строке?

Зарание благодарен.


 
Reindeer Moss Eater   (2003-01-14 16:02) [1]

Подсказка:
TidHttp никакого понятия о твоем цикле не имеет. И конечно же ошибка связана не с ним. Обрати внимание на освобождение ресурсов.


 
Reindeer Moss Eater   (2003-01-14 16:05) [2]

А вообюще лучще сначала делать Get, и только в случае успеха открывать файл.


 
Chubais ©   (2003-01-14 16:22) [3]

ну дык на эксепшне поставь дисконект


 
Reindeer Moss Eater   (2003-01-14 16:26) [4]

Chubais ©
Не путай человека.


 
Grin ©   (2003-01-14 16:32) [5]


> TidHttp никакого понятия о твоем цикле не имеет.

TidHttp поочереди запрашивает урлы из списка. После того как натыкается на неверный урл, всеостальные (по моему даже не проверяет)


> Обрати внимание на освобождение ресурсов.

После HTTP.Free; вылетает ужасня ошибка и все плохо. Что делать??


 
Reindeer Moss Eater   (2003-01-14 16:39) [6]

Еще раз:
Для TidHttp абсолютно фиолетово сколько раз ты вызываешь метод GET. Абсолютно. В цикле или вне цикла.

У тебя в одной строке кода два вызова, которые потенциально могут вызвать исключение. С чего ты решил, что результата не достигаешь из-за якобы странного поведения idHTTP в цикле?????


 
Grin ©   (2003-01-14 16:52) [7]


> У тебя в одной строке кода два вызова, которые потенциально
> могут вызвать исключение. С чего ты решил, что результата
> не достигаешь из-за якобы странного поведения idHTTP в цикле?????

Ну так первые три строчки полюбому выполняются
1 try
2 AssignFile(B, "htm.txt");
3 Rewrite(B);


А HTTP.Get(url)после обращения к неверному урлу на следуйщем круге (и до конца цикла) не достает сайты ....?




 
Reindeer Moss Eater   (2003-01-14 16:55) [8]

WriteLn(B,HTTP. Get(url);
Так надеюсь понятно наконец?


 
Reindeer Moss Eater   (2003-01-14 17:06) [9]

И еще подумай, будет ли закрыт открытый файл в случае возникновения исключения?


 
Grin ©   (2003-01-14 17:08) [10]


> Так надеюсь понятно наконец?


Ну какой эксепшн может быть в WriteLn?? Если файл есть.
А вот после HTTP.Get(url) ничего нет и файл в итоге пустой...


 
Grin ©   (2003-01-14 17:11) [11]


> И еще подумай, будет ли закрыт открытый файл в случае возникновения
> исключения?

Ну выдавалобы I/O Error ...


 
Chubais ©   (2003-01-14 17:12) [12]

и совсем не путаю
у меня было такое - после ошибки дисконект приходилось делать
может я это и неправильно делал, но мне помогало)))


 
Reindeer Moss Eater   (2003-01-14 17:20) [13]

>Chubais

Вот кусочек из класса:
procedure TIdCustomHTTP.CheckAndConnect(AResponse: TIdHTTPResponse);
begin
if not AResponse.KeepAlive then begin
Disconnect;
end;

При вызове Get внутри класса вызывается CheckAndConnect.

>Grin © (14.01.03 17:11)

Если в 4 строке исключение, то кто закрывает файл?


 
Reindeer Moss Eater   (2003-01-14 17:22) [14]

А вот после HTTP.Get(url) ничего нет и файл в итоге пустой...
Файл пустой не обязательно потому, что Get ничего не вернул.


 
Grin ©   (2003-01-14 17:30) [15]


> Chubais


Не помогает ...


 
Grin ©   (2003-01-14 17:34) [16]


> Если в 4 строке исключение, то кто закрывает файл?

Зачем, он перезаписывается на следующем круге....


 
Chubais ©   (2003-01-14 17:35) [17]

2 Reindeer Moss Eater
мб, у мну версия не та была
мб KeepAlive был True
тем не менее я бы на месте грина попробовал..
и давно бы get в строку сделал, чтоб не было толкания на одном месте и выяснения, в чем причина ошиПки


 
Reindeer Moss Eater   (2003-01-14 17:39) [18]

Зачем, он перезаписывается на следующем круге....
Grin, тебе не сюда, тебе в патентное бюро надо. Пока не застолбили новейший способ борьбы с потерей ресурсов.



 
Chubais ©   (2003-01-14 17:41) [19]

> Grin © (14.01.03 17:30)
ну тада - F7/F8 тебе помогут


 
Grin ©   (2003-01-14 17:42) [20]

Я иссяк ..........
Я почти уверен, что проблема в TIDHttp. Такое ощющение, что после неудачного запроса он запоминает свое состояние и больше ни чего не конектит .............
Я скоро зДоХнУ..............


 
Reindeer Moss Eater   (2003-01-14 17:43) [21]

Таблетки от упрямства не пробовал принимать?
Не в TIDHttp проблема.


 
Grin ©   (2003-01-14 17:44) [22]


> Grin, тебе не сюда, тебе в патентное бюро надо. Пока не
> застолбили новейший способ борьбы с потерей ресурсов.

Гуд.
Загляну и туда как-нибудь.


 
Grin ©   (2003-01-14 17:46) [23]


> Таблетки от упрямства

:-)) ок!


 
Reindeer Moss Eater   (2003-01-14 17:48) [24]

var
Trafic_Limit : boolean;
Content:string;
Trafic_Limit:=False;
While not Trafic_Limit do
try
Application.ProcessMessages;
Content:=HTTP.Get(url);
Memo1.Lines.Add(Content);
exception
On E:Exception do Memo1.Lines.Text:=E.Message;
end;


 
Chubais ©   (2003-01-14 18:04) [25]

Reindeer Moss Eater (14.01.03 17:39)

подписываюсь))))


 
Grin ©   (2003-01-14 18:25) [26]


> On E:Exception do Memo1.Lines.Text:=E.Message;


Socket Error # 10053
Software caused connection abort.

?????????????


 
Grin ©   (2003-01-15 10:56) [27]


> Reindeer Moss Eater (14.01.03 16:02)
> Подсказка:
> TidHttp никакого понятия о твоем цикле не имеет. И конечно
> же ошибка связана не с ним. Обрати внимание на освобождение ресурсов.

Таблетки от упрямства - хорошая штук!!! Спасибо! До скорого!


 
Reindeer Moss Eater   (2003-01-15 11:04) [28]

Grin ©
Если есть подозрение, что в той версии Indy, что у тебя, TidHTTP плохо работает при последовательных вызовах методов, то самое простое решение - это создавать новый экземпляр TidHTTP в каждой итерации цикла с последующим убитием его.


 
Grin ©   (2003-01-15 11:44) [29]


> создавать новый экземпляр


Спасибо, я так и сделал :-))



Страницы: 1 вся ветка

Текущий архив: 2003.03.06;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.022 c
1-17043
Wizzard
2003-02-25 12:44
2003.03.06
Конвертация чисел в разных нац.версиях Виндовса


6-17235
defenseur
2003-01-16 20:40
2003.03.06
определение домена


3-16978
VIB
2003-02-17 17:12
2003.03.06
DBGrid


1-16990
malkolinge
2003-02-24 15:22
2003.03.06
Как запретить перемещение формы ?


1-16998
BPK
2003-02-22 19:43
2003.03.06
Как автоматически открывать Main unit в Library?