Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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)...и все...
далее читай все что приходить и анализируй это...


Наверх

Титульная страница Поиск, карта сайта Написать письмо