Autor Téma: DownloadToStream  (Přečteno 228 krát)

Offline František

  • Hrdina
  • ****
  • Příspěvků: 335
  • Karma: 3
    • Verze Delphi: primárne v XE5, občaas 10.1 starter, XE, BDS2006
DownloadToStream
« kdy: 29-01-2018, 13:11:14 »
Ako sa dá stiahnuť súbor (textovy) z webu, ale do memorystreamu bez zapisovania na disk?
ešte presnejšie, rovno do TStringList (viem ze staci LoadFromStream..)
« Poslední změna: 29-01-2018, 13:12:56 od František »

Offline František

  • Hrdina
  • ****
  • Příspěvků: 335
  • Karma: 3
    • Verze Delphi: primárne v XE5, občaas 10.1 starter, XE, BDS2006
Re:DownloadToStream
« Odpověď #1 kdy: 29-01-2018, 13:26:28 »
Kód: Delphi [Vybrat]
  1. var
  2.   parser:TStrings;
  3.   Reply: TStream;
  4.   IdHTTP1: TIdHTTP;
  5.  
  6.   function Ipfilter(sTexto: String): String;
  7.   var
  8.     iCont: Short;
  9.     sTemp: AnsiString;
  10.   begin
  11.     sTemp := '';
  12.     for iCont := 1 to Length(sTexto) do
  13.       if (sTexto[iCont] in ['0'..'9','.']) then
  14.         AppendStr(sTemp, sTexto[iCont]);
  15.     Result := sTemp;
  16.   end;
  17.  
  18. begin    
  19. IdHTTP1 := TIdHTTP.Create();
  20.     parser := TStringList.Create;
  21.     Reply := TMemoryStream.Create;
  22.  try
  23.     IdHTTP1.Get('http://checkip.dyndns.org/', Reply);
  24.     Reply.Position := 0;
  25.     parser.LoadFromStream(reply);
  26.     result:=ipfilter(copy(parser.text,pos('IP Address: ',parser.text)+12,16));
  27.  finally
  28.     Reply.Free;
  29.     parser.Free;
  30.     IdHTTP1.Free;
  31.  end;
  32. end;
  33.  

kompletka na zistenie verejnej IPčky
« Poslední změna: 29-01-2018, 13:29:23 od František »

Offline Delfin

  • Guru
  • *****
  • Příspěvků: 781
  • Karma: 35
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:DownloadToStream
« Odpověď #2 kdy: 29-01-2018, 14:33:07 »
Anebo se sluzbou WhatIsMyIpAddress primo do stringu:

Kód: Delphi [Vybrat]
  1. var
  2.   IP: string;
  3. begin
  4.   IP := IdHTTP1.Get('http://bot.whatismyipaddress.com');
  5.   ...
  6. end;

Jinak, to Tve "parsovani" si dokazu predstavit zmatene v pripade kdy server te sluzby vrati napr. vlastni interni chybu, ale to je spis dan za nezdokumentovane API (resp. asi zadne pro tento pripad ta sluzba ani nenabizi); co ja vim, treba takovato odezva by Ti nejspis zkazila den:

Kód: Delphi [Vybrat]
  1. Service no longer available. Goodbye! 29.01.2019
« Poslední změna: 29-01-2018, 14:51:51 od Delfin »
I'm a soldier, so don't panic!

Offline Delfin

  • Guru
  • *****
  • Příspěvků: 781
  • Karma: 35
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:DownloadToStream
« Odpověď #3 kdy: 29-01-2018, 15:13:29 »
Samozrejme, ve Tvem pripade muzes obsah stahnout taktez do stringu. Stream, ani string list nejsou treba kdyz stejne v "parseru" pracujes jen se stringem. Tady je dalsi sluzba ktera vraci jen text s IP:

Kód: HTML [Vybrat]
  1. http://ipinfo.io/ip
« Poslední změna: 29-01-2018, 15:37:28 od Delfin »
I'm a soldier, so don't panic!

Offline František

  • Hrdina
  • ****
  • Příspěvků: 335
  • Karma: 3
    • Verze Delphi: primárne v XE5, občaas 10.1 starter, XE, BDS2006
Re:DownloadToStream
« Odpověď #4 kdy: 29-01-2018, 15:56:27 »
no tak toto je pekné

Offline Delfin

  • Guru
  • *****
  • Příspěvků: 781
  • Karma: 35
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:DownloadToStream
« Odpověď #5 kdy: 29-01-2018, 17:54:23 »
no tak toto je pekné

No, ne uplne. I s temi ostatnimi sluzbami neni jisty API kontrakt (doufam ze jim nekrivdim). Tak jako tak bych overil zda muze byt text odpovedi IP adresou, nehlede na pouzitou sluzbu ;)
« Poslední změna: 29-01-2018, 18:03:10 od Delfin »
I'm a soldier, so don't panic!

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Jméno: E-mail:
Ověření:
Datový typ v Delphi, který má True a False: