Komunikace přes HTTP pomocí Indy

vložil [Z] 24. ledna 2011 20:43

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.

Tagy: , ,

Praxe

Komentáře

22.11.2012 2:00:09 #

TLama

Ad "je vhodné Get, Post apod. ošetřit pomocí tohoto". Toto dělá tamto pomocí tohoto je sice krásně "český" popis, nicméně, je nejen vhodné, ale dokonce nutné ošetřit volání všech metod týkajících se práce s komponentami Indy, protože jsou řízené vyjímkami. Tedy, v tomto případě si dovolím opravu - "je nutné Get, Post apod. ošetřit pomocí tohoto" :-)

TLama

2.10.2013 9:30:47 #

z.

pravda, kdyz to ted ctu po sobe, taky bych to a tamto opravil :D

z.

Komentování ukončeno

Naše nabídka

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy).

Delphi Certified Developer

O Delphi.cz

Delphi je jediný moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64, Mac OSX a na iPhone a Android.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Poslední komentáře

Comment RSS

Dle měsíců