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.


Nabízíme Delphi školení a konzultace na různá témata, primárně ve Vaší firmě.

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

Partial English version.

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 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, Win64 , Mac OSX a na iPhone a Android (s výhledem na další platformy díky FireMonkey) na současném trhu (včetně Windows 8.1).

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.

Anketa

Poslední komentáře

Comment RSS