Текущий архив: 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.48 MB
Время: 0.051 c