![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
http [D6, Win2k]
ev © (2001-12-07 20:20:00)Мастера подскажите .... как послать HTTP запрос и получить ответ (массив байт) не используя стандартные компоненты Delphi, а напрямую (через сокеты).
Можно даже в исходниках ;)
nikkie (2001-12-17 15:41:00) [1]
приятная новость :)))
ev (2001-12-15 15:32:00) [2]Разобрался !!!!!!!!!!!!!!!!!!!!!
Глюк не в Indy ! - только сильно меня не бейте ;)
Глюк в Delphi 6. Скачал Borland Delphi 6 Update Fix - утечки нет !!!!
ev (2001-12-13 19:09:00) [3]Даже если не создавать TidHTTP динамически - результат тот-же.
var
x: string;
a: byte;
begin
a:=0;
while a<>1 do x:=http.Get(" http://192.168.77.23/cgi/data.cgi?param=1");
end;
Т.е. я думаю, что глюк может быть в 2-х местах
1. компонента Indy
2. присваивание переменной xбольшой строки (около 30 КБайт)
Как с этим бороться ?!?!?!
ev (2001-12-13 18:46:00) [4]ok. Вот полный текст.
var
http: TIdHTTP;
x: string;
a: byte;
begin
a:=0;
while a<>1 do begin
try
http:=TidHTTP.Create(nil);
x:=http.Get(" http://192.168.77.23/cgi/data.cgi?param=1");
http.Free;
except
http.Free;
end;
end;
end;
nikkie (2001-12-13 12:23:00) [5]>ev
ну как тебе можно тебе советовать, когда ты на вопросы не отвечаешь?
какая версия инди - не сказал. код привел, но неполный. по твоему коду panov сказал - удивительно, если в нем утечки не возникнет. вот ты говоришь "там try стоит". а где "там"? снаружи цикла?
если хочешь разобраться - напиши маленькое консольное приложение (раз уж ты динамически компоненту создаешь), проверь, что утечка по-прежнему есть и ВЕСЬ код - сюда.
вот только мне еще непонятно, зачем постоянно компоненту создавать/разрушать? не проще создать ее при старте приложения и разрушить в конце?
ev (2001-12-13 02:41:00) [6]да. на самом деле там try...
panov (2001-12-11 20:57:00) [7]А если во время x:=http.Get(" http://192.168.77.23/cgi/data.cgi?param=1");
ошибка произойдет?
Выполнится тогда код
http.Free;
?
ev (2001-12-11 19:57:00) [8]2 $hade: спасибо, попробую...
Хочется окончательно разобраться с Indy (или с руками ;) ).
var
http: TIdHTTP;
x: string;
a: byte;
....
a:=0;
while a<>1 do begin
http:=TidHTTP.Create(nil);
x:=http.Get(" http://192.168.77.23/cgi/data.cgi?param=1");
http.Free;
end;
...
Память выделяемая для программы постоянно увеличивается.
Да, для полноты можно сказать, что в xзаписывается около 25-35 КБайт!!!
$hade (2001-12-11 07:29:00) [9]по поводу утечки.... я писал что-то вроде прокси...точнее TCP Mapping для халявного инета...ща она нелегально стоит на серваке у нас и дает мне инет в обход нашего WinGate"а...(а то 20 метров в месяц маловато :-) Дык вот...серват ессесьно не выключается...и вот уже 2 недели и никуда не утекла память... :)
var
Request:TStringList;
begin
Request:=TStringList.Create;
Request.Add("GET http://www.ya.ruHTTP/1.1")
Request.Add("Host=www.ya.ru");
...и так далее....
IdTCPClient.SendHeader(Request);
...все...вроде так... :-)
nikkie (2001-12-10 19:45:00) [10]>ev
по поводу indy
- какая версия?
- как проверяешь утечку?
- сделай тестовую программку, на которой проявляется утечка, и весь код - сюда
у меня indy 8.00.23, NT+SP5, смотрел TaskManager"ом и с помощью GetHeapStatus - никакой утечки не вижу (запускал IdHTTP.Get в цикле 100 раз)
ev (2001-12-10 16:47:00) [11]Все дело в том, что в компонентах Indy глюки
- утечка памяти
- невозможжность работы постоянно (круглосуточно)
ЗЫ. если можно - примерчик ;)
2 $hade: где StringList заполнять?
$hade (2001-12-10 11:19:00) [12]создаешь сокет...цепляешся куда надо...далее создаешь HTTP запрос (для етого читаешь доку по НТТР :-) и отправляешь...все просто....:-)))
а чем не нравица компоненты? ) тот же TIdTCPClient ни чем сильно и не отличается от сокетов...даже более -ет оно и есть :-)
!! Причем!! В нем есть ф-ия SendHeader( вроде бы ) - она как раз и сделана для отправки НТТР запроса...заполняешь StringList :
GET www.porno.ru/ASS.jpg /HTTP 1.1 (правильнось не гарантирую - не помню)
HOST=www.porno.ru
^^ именно "="
Accept=бла-бла...
...и так далее...потом SendHeader(твой StringList)...и все...
далее читай все что приходить и анализируй это...