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

Вниз

Загрузка части страницы методом Post (idhttp)   Найти похожие ветки 

 
free)styler   (2006-09-15 22:35) [0]

Объясните пожалуйста как, если вообще возможно, методом post загрузить только часть страницы т.к. мне не нужен весь код а только его начало. хочу съэкономить трафик.
Заранее спасибо!


 
Eraser ©   (2006-09-15 22:53) [1]

> [0] free)styler   (15.09.06 22:35)

методом Post - нельзя.


 
SergP ©   (2006-09-15 23:06) [2]

> [1] Eraser ©   (15.09.06 22:53)
> > [0] free)styler   (15.09.06 22:35)
>
> методом Post - нельзя.


Почему нельзя?
ИМХО можно... правда только с начала...
Типа когда нужная часть загрузится то сражу же рвать соединение.


 
Орион ©   (2006-09-15 23:15) [3]

> [0] free)styler   (15.09.06 22:35)

TIdTCP + rfc по http и будет тебе счастье.


 
free)styler   (2006-09-16 11:20) [4]

> Почему нельзя?ИМХО можно... правда только с начала...Типа
> когда нужная часть загрузится то сражу же рвать соединение.

мне нужно загрузить только примерно до середины страницу. а как отсделить что нужная часть уже скачена?


 
Орион ©   (2006-09-16 12:34) [5]

> [4] free)styler   (16.09.06 11:20)

Что такое "примерно", "середина" и "нужная часть"?


 
free)styler   (2006-09-16 12:47) [6]

методом post я запрашиваю страницу статистики. в строковую переменную получаю код страницы. нужная часть, т.е цифры показывающие остаток на счете, находятся в примерно в середине этого html кода, т.е загружать полностью страницу не имеет смысла. так вот суть вопроса и заключалась в том чтобы загрузить страницу именно с той частью кода и всё, дабы остальное абсолютно не нужно. это возможно? я просто где то что можно как то задать в байтах величину ответа сервера после POSTа. но потерял этот форум. решил обратиться суда.


 
Орион ©   (2006-09-16 16:16) [7]

> [6] free)styler   (16.09.06 12:47)

> я просто где то что можно как то задать в байтах величину ответа сервера после POSTа.
нельзя.

Чем POST запрос делаешь? TidHTTP? От него ничего не добьешся.

Я же написал в [3]. Формируешь руками пост запрос. Отсылаешь серверу. Ответ получаешь по кускам и анализируешь. Когда нужная тебе инфа загрузилась, рвешь соединение.
Все просто как 5 копеек. Но вот код тебе писать никто не будет. Хотя... WMZ есть?)))))


 
Ketmar ©   (2006-09-16 16:18) [8]

> [7] Орион ©   (16.09.06 16:16)
почему не добьёшся? что, в инди уже запретили свойства "range" (или как их там зовут)?


 
Орион ©   (2006-09-16 16:23) [9]

> [8] Ketmar ©   (16.09.06 16:18)

я бы свой велосипед написал, точней уже написал :)


 
Ketmar ©   (2006-09-16 16:27) [10]

> [9] Орион ©   (16.09.06 16:23)
я тоже индейцев редко использую. но у меня и задачи мелкие. %-)


 
free)styler   (2006-09-16 21:52) [11]


>  Ответ получаешь по кускам и анализируешь.

вот именно это то и интересно. я понимаю что когда получаю нужную часть рвать соединение но как именно часть получить?


 
Dmitrij_K   (2006-09-16 22:34) [12]

для 9 инди
подключи к idHTTP IdLogEvent (Indy Intercepts) в нем лови OnReceived параметр aData - это пришедшие данные, копи их в своем буфере, а потом когда скачаешь сколько надо, делай
(ASender as TIDHttp).Socket.Close;
А вызов IdHTTP.Post сделай в try except , тк разрыв сокета вызовет исключение.


 
free)styler   (2006-09-17 16:24) [13]

Спасибо с этим разобрался!
а скажите пожалуйста как программно связать IDHTTP И IdLogEvent?
и как выполнить программно процедуру OnReceived?
просто пытаюсь сделать в программе отдельный поток при выполнении этого запроса.
вот код:
procedure test.Execute;
var
Request : TStringList;
begin
freeonterminate:=true;
request:=tstringlist.Create;
request.Add("Login=my_log");
request.Add("Password=my_pass");
idhttp:=TIdhttp.Create(nil);
IdLogEvent1:=tIdLogEvent.Create(nil);
try
idhttp.HandleRedirects:=true;
fresult:=idhttp.Post("http://class.avtograd.ru/v2/Detect.Asp",request);
Synchronize(answer);
finally
end;
end;
Пробую выполнить так:
IdLogEvent1.onreceived(idhttp,adata,"")
но adata пустой.
помогите!


 
Dmitrij_K   (2006-09-17 17:07) [14]

Ну вот примерно так
unit Unit2;

interface

uses
 Classes, IdHTTP, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient;

type
 HTTPTHREAD = class(TThread)
 private
   { Private declarations }
   procedure IdHTTPWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Integer);
 protected
   procedure Execute; override;
 end;

implementation

{ Important: Methods and properties of objects in visual components can only be
 used in a method called using Synchronize, for example,

     Synchronize(UpdateCaption);

 and UpdateCaption could look like,

   procedure HTTPTHREAD.UpdateCaption;
   begin
     Form1.Caption := "Updated in a thread";
   end; }

{ HTTPTHREAD }

procedure HTTPTHREAD.Execute;
var idhttp : TIdhttp;
   s      : TStringStream;
begin
 s      := TStringStream.Create("");
 idhttp := TIdhttp.Create(nil);
 idhttp.RecvBufferSize := 512; // будет чаще вызываться OnWork
 try
   idhttp.OnWork := IdHTTPWork;
   try      IdHTTP.Get("http://img79.imageshack.us/img79/4773/20060311haskawallpapersruvesna20061024x768a101523rk1.jpg", s);
   except
   end;
   if s.Size>1000 then // OK
   begin
   // s.DataString
   end
 finally
   idhttp.Free;
   s.Free;
 end;
end;

procedure HTTPTHREAD.IdHTTPWork(ASender: TObject; AWorkMode: TWorkMode;
 AWorkCount: Integer);
begin
 if AWorkMode=wmRead then
   if AWorkCount>1000 then
     (ASender as TIdHTTP).Socket.Close
end;

end.


 
free)styler   (2006-09-17 21:36) [15]

Спасибо огромное всё получилось!!



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

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

Наверх




Память: 0.5 MB
Время: 0.032 c
15-1170324550
ocean
2007-02-01 13:09
2007.02.25
Витая пара на 200 м


15-1170237500
suturn
2007-01-31 12:58
2007.02.25
Help!!!


15-1170296895
Дом
2007-02-01 05:28
2007.02.25
Нет ли какого нибудь устройства, чтоб подключать к компу и управл


15-1170559011
Лирик
2007-02-04 06:16
2007.02.25
Шарик падает вдоль стенки и начинает её касаться без проскальзыва


15-1170173370
_uw_
2007-01-30 19:09
2007.02.25
Хочется поругаться с кайфом