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

    1uses
    2  IdHTTP;
    3
    4    5
    6var
    7  s: string;
    8  IdHTTP: TIdHTTP;
    9begin
   10  IdHTTP:= TIdHTTP.Create(nil);
   11  try
   12    // do "s" je ulozen text
   13    s:=IdHTTP.Get('http://www.test.com');
   14  finally
   15    IdHTTP.Free;
   16  end;
   17end;

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

    1uses
    2  IdHTTP;
    3
    4    5
    6var
    7  s: string;
    8  IdHTTP: TIdHTTP;
    9  post: TStringList; // seznam parametru <form>
   10begin
   11  IdHTTP:= TIdHTTP.Create(nil);
   12  post:=TStringList.Create;
   13  try
   14    post.Add('info=text'); // v HTML je to <input name="info" value="text">
   15    s:=IdHTTP.Post('http://www.test.com/', post);
   16  finally
   17    IdHTTP.Free;
   18    post.Free;
   19  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.

    1procedure TFormNeco.IdHTTP1Status(ASender: TObject; const AStatus: TIdStatus;
    2  const AStatusText: string);
    3begin
    4
    5end;
    6
    7procedure TFormNeco.IdHTTP1Work(ASender: TObject; AWorkMode: TWorkMode;
    8  AWorkCount: Int64);
    9begin
   10
   11end;
   12
   13//a pak to lze použít třeba takto …
   14
   15IdHTTP.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

Přidat komentář





  • Komentář
  • Náhled
Loading



Naše nabídka

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

Neváhejte nás kontaktovat (i ohledně reklamy nebo burzy práce).

Pokud chcete podpořit tento server libovolnou částkou, můžete použít PayPal. Moc děkuji.

Delphi Certified Developer

O Delphi.cz

Delphi je jediný moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32 a Win64 (a Mac OSX, s výhledem na iPhone a Android díky FireMonkey) na současném trhu (včetně Windows 7).

V současnosti je světová komunita přes dva miliónů vývojářů.

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.

Burza delfínů nabízí pracovní možnosti pro programátory v Delphi.

Anketa

Poslední komentáře

Comment RSS