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

Вниз

http   Найти похожие ветки 

 
ev   (2001-12-07 20:20) [0]

Мастера подскажите .... как послать HTTP запрос и получить ответ (массив байт) не используя стандартные компоненты Delphi, а напрямую (через сокеты).

Можно даже в исходниках ;)


 
$hade ©   (2001-12-10 11:19) [1]

создаешь сокет...цепляешся куда надо...далее создаешь HTTP запрос (для етого читаешь доку по НТТР :-) и отправляешь...все просто....:-)))
а чем не нравица компоненты? ) тот же TIdTCPClient ни чем сильно и не отличается от сокетов...даже более -ет оно и есть :-)
!! Причем!! В нем есть ф-ия SendHeader( вроде бы ) - она как раз и сделана для отправки НТТР запроса...заполняешь StringList :
GET www.porno.ru/ASS.jpg /HTTP 1.1 (правильнось не гарантирую - не помню)
HOST=www.porno.ru
^^ именно "="
Accept=бла-бла...

...и так далее...потом SendHeader(твой StringList)...и все...
далее читай все что приходить и анализируй это...


 
ev ©   (2001-12-10 16:47) [2]

Все дело в том, что в компонентах Indy глюки
- утечка памяти
- невозможжность работы постоянно (круглосуточно)

ЗЫ. если можно - примерчик ;)

2 $hade: где StringList заполнять?


 
nikkie ©   (2001-12-10 19:45) [3]

>ev
по поводу indy
- какая версия?
- как проверяешь утечку?
- сделай тестовую программку, на которой проявляется утечка, и весь код - сюда

у меня indy 8.00.23, NT+SP5, смотрел TaskManager"ом и с помощью GetHeapStatus - никакой утечки не вижу (запускал IdHTTP.Get в цикле 100 раз)


 
$hade   (2001-12-11 07:29) [4]

по поводу утечки.... я писал что-то вроде прокси...точнее TCP Mapping для халявного инета...ща она нелегально стоит на серваке у нас и дает мне инет в обход нашего WinGate"а...(а то 20 метров в месяц маловато :-) Дык вот...серват ессесьно не выключается...и вот уже 2 недели и никуда не утекла память... :)

var
Request:TStringList;
begin
Request:=TStringList.Create;
Request.Add("GET http://www.ya.ru HTTP/1.1")
Request.Add("Host=www.ya.ru");
...и так далее....
IdTCPClient.SendHeader(Request);
...все...вроде так... :-)


 
ev ©   (2001-12-11 19:57) [5]

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 КБайт!!!


 
panov ©   (2001-12-11 20:57) [6]

А если во время x:=http.Get(" http://192.168.77.23/cgi/data.cgi?param=1");
ошибка произойдет?
Выполнится тогда код
http.Free;
?


 
ev ©   (2001-12-13 02:41) [7]

да. на самом деле там try...


 
nikkie ©   (2001-12-13 12:23) [8]

>ev
ну как тебе можно тебе советовать, когда ты на вопросы не отвечаешь?
какая версия инди - не сказал. код привел, но неполный. по твоему коду panov сказал - удивительно, если в нем утечки не возникнет. вот ты говоришь "там try стоит". а где "там"? снаружи цикла?

если хочешь разобраться - напиши маленькое консольное приложение (раз уж ты динамически компоненту создаешь), проверь, что утечка по-прежнему есть и ВЕСЬ код - сюда.

вот только мне еще непонятно, зачем постоянно компоненту создавать/разрушать? не проще создать ее при старте приложения и разрушить в конце?


 
ev ©   (2001-12-13 18:46) [9]

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;


 
ev ©   (2001-12-13 19:09) [10]

Даже если не создавать 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-15 15:32) [11]

Разобрался !!!!!!!!!!!!!!!!!!!!!
Глюк не в Indy ! - только сильно меня не бейте ;)

Глюк в Delphi 6. Скачал Borland Delphi 6 Update Fix - утечки нет !!!!


 
nikkie ©   (2001-12-17 15:41) [12]


приятная новость :)))



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

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

Наверх




Память: 0.49 MB
Время: 0.01 c
6-9247
Snake2000
2001-12-11 12:41
2002.03.04
Срочно!!! - Post-запрос


6-9260
Nikolay
2001-12-17 22:15
2002.03.04
только не бейте ногами


1-9211
Tadeush
2002-02-13 12:26
2002.03.04
Ошибка


1-9114
Alex L.
2002-02-15 18:02
2002.03.04
Объединение компонентов


3-9052
sgs
2002-02-06 12:13
2002.03.04
Был бы очень рад если кто помог бы с запросом...