Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2007.02.25;
Скачать: [xml.tar.bz2];

Вниз

Загрузка части страницы методом 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.038 c
2-1170998414
Grover
2007-02-09 08:20
2007.02.25
Проблема с редактором после сохранения файла.


1-1168119506
BOB16
2007-01-07 00:38
2007.02.25
вытащить Title у системного hint-окошка


2-1170556818
Riply
2007-02-04 05:40
2007.02.25
Обращение к свойству класса после вызова Destroy.


6-1158240246
progmax
2006-09-14 17:24
2007.02.25
Direct connect через IdMappedPortTCP


11-1149954658
Фдуч
2006-06-10 19:50
2007.02.25
Помогите с PCAsm





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский