Delphi.cz

Český portál Delphi

Komunikace přes HTTP pomocí Indy

Opět přicházím s malým článkem pro využití komponent Indy.

Nyní přináším drobné základy pro komunikaci pomocí protokolu HTTP a nabízím alternativu k Synapse, které ve svém článku popsal Radek - viz. komunikace přes HTTP pomocí Synapse.

Jen pro připomenutí - něco o Indy a aktualizaci na nejnovější verzi.

Malé drobnosti jsem zapomněl podotknout - Indy jsou komponenty, proto není potřebné vše vytvářet v kódu. Na rozdíl od Synapse, Indy lze jednoduše položit na formulář. A protože jde o synchronní přenos, při spuštění "práce" hlavní formulář zamrzne.

Samozřejmě, nejlepší řešení je vytvořit si vlákno. Pro ty, kteří nemají tolik znalostí nebo času, stačí vytvořit / položit na formulář komponentu IdAntiFreeze a máte vystaráno (tato komponenta sama zajistí, aby formulář byl jakž takž přístupný).

Nyní už velmi jednoduchý příklad pro stažení stránky

uses
  IdHTTP;

…

var
  s: string;
  IdHTTP: TIdHTTP;
begin
  IdHTTP:= TIdHTTP.Create(nil);
  try
    // do "s" je ulozen text
    s:=IdHTTP.Get('http://www.test.com');
  finally
    IdHTTP.Free;
  end;
end;

Stejně jednoduše lze zaslat požadavky Post, Head …

uses
  IdHTTP;

…

var
  s: string;
  IdHTTP: TIdHTTP;
  post: TStringList; // seznam parametru <form>
begin
  IdHTTP:= TIdHTTP.Create(nil);
  post:=TStringList.Create;
  try
    post.Add('info=text'); // v HTML je to <input name="info" value="text">
    s:=IdHTTP.Post('http://www.test.com/', post);
  finally
    IdHTTP.Free;
    post.Free;
  end;

Samozřejmě stažená data není potřeba dávat do stringu. Indy umí stáhnout data do následníka TStream, který je v parametru, a dál s tím pracovat (stažení do souboru).

  IdHTTP.Get('http://www.test.com/', stream);

V případě ukládání do stringu je možné specifikovat i kódování, jinak se Indy pokouší automaticky rozpoznat.

Indy samozřejmě podporují mnoho standardních nastavení.

Proxy

  IdHTTP.ProxyParams.ProxyServer:=server;
  IdHTTP.ProxyParams.ProxyPort:=port;
  IdHTTP.ProxyParams.ProxyUsername:=username;
  IdHTTP.ProxyParams.ProxyPassword:=password;
  IdHTTP.ProxyParams.BasicAuthentication:=True;

Mnoho nastavení lze najít pod IdHTTP.Request.

Co se týče průběhu a statusu, tyhle dvě procedury Vám pomohou. Případně u komponent se vytváří samy v Events.

procedure TFormNeco.IdHTTP1Status(ASender: TObject; const AStatus: TIdStatus;
  const AStatusText: string);
begin

end;

procedure TFormNeco.IdHTTP1Work(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCount: Int64);
begin

end;

//a pak to lze použít třeba takto …

IdHTTP.OnWork:=IdHTTP1Work;

Nakonec ještě dodám, že je vhodné Get, Post apod. ošetřit pomocí tohoto, protože Indy pomocí toho vrací chybové kódy 404, 500 apod.

  try
    Get …
  except
    on E: Exception
      …
  end;

No, kdyby někomu nebylo něco jasné, lze dodat více informací. Každopádně jde toho hodně objevit.

Datum: 2011-01-24 19:43:00 Tagy: synapse, začátečníci, Indy

Praxe