AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Mit IdHTTP Seite aufrufen und an MemoryStream übergeben = Zeichen fehlerhaft
Thema durchsuchen
Ansicht
Themen-Optionen

Mit IdHTTP Seite aufrufen und an MemoryStream übergeben = Zeichen fehlerhaft

Ein Thema von bogdan · begonnen am 27. Apr 2018 · letzter Beitrag vom 28. Apr 2018
 
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#21

AW: Mit IdHTTP Seite aufrufen und an MemoryStream übergeben = Zeichen fehlerhaft

  Alt 28. Apr 2018, 00:57
Hallo nochmal,
hier zwei neue Samples die auch HTTPS Unterstützen, diesmal sollte nichts schiefgehen, aber mal abwarten was so kommt
Delphi-Quellcode:
Uses WinInet;

function GetUrlContent(const Url: string): UTF8String;
var
  NetHandle: HINTERNET;
  UrlHandle: HINTERNET;
  Buffer: array[0..1023] of byte;
  BytesRead: dWord;
  StrBuffer: UTF8String;
begin
  Result := '';
  NetHandle := InternetOpen('Delphi-PRAXiS RockZ', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  if Assigned(NetHandle) then
    try
      UrlHandle := InternetOpenUrl(NetHandle, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD, 0);
      if Assigned(UrlHandle) then
        try
          repeat
            InternetReadFile(UrlHandle, @Buffer, SizeOf(Buffer), BytesRead);
            SetString(StrBuffer, PAnsiChar(@Buffer[0]), BytesRead);
            Result := Result + StrBuffer;
          until BytesRead = 0;
        finally
          InternetCloseHandle(UrlHandle);
        end
      else
        raise Exception.CreateFmt('Cannot open URL %s', [Url]);
    finally
      InternetCloseHandle(NetHandle);
    end
  else
    raise Exception.Create('Unable to initialize Wininet');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  temp1, temp2: String;
  i : Integer;
begin
  Memo1.Clear;
  Temp1 := ''; Temp2 := '';
  Memo1.Lines.Add('Downloading Data from ' +Edit1.Text);
  Memo1.Lines.Add('Please Wait...');
  Temp1 := Edit1.Text;
  if Length(Temp1) > 0 then Temp2 := GetUrlContent(Temp1);
  Memo1.Lines.Text := Temp2;
  i := Length(Memo1.Lines.Text) ;
  Memo1.Lines.Add('HTTP/S HTML Source from: '+Temp1);
  Memo1.Lines.Add('Downloaded: '+IntToStr(Length(Temp2)) +' bytes, displaying: ' +IntToStr(i)+ ' chars. ' +IntToStr(Length(Temp2)-i)+ ' bytes are different!');
end;
Und hier die WinApi Variante, sollte auch HTTPS tauglich sein.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  http: variant;
  temp1, temp2: String;
  i : Integer;
begin
  Memo1.Clear;
  Temp1 := ''; Temp2 := '';
  Memo1.Lines.Add('Downloading Data from ' +Edit1.Text);
  Memo1.Lines.Add('Please Wait...');
  Temp1 := Edit1.Text;
  http:=createoleobject('WinHttp.WinHttpRequest.5.1');
  http.open('GET', Temp1, false);
  http.send;
  Temp2 := http.responsetext;
  Memo1.Lines.Text := Temp2;
  i := Length(Memo1.Lines.Text) ;
  Memo1.Lines.Add('HTTP/S HTML Source from: '+Temp1);
  Memo1.Lines.Add('Downloaded: '+IntToStr(Length(Temp2)) +' bytes, displaying: ' +IntToStr(i)+ ' chars. ' +IntToStr(Length(Temp2)-i)+ ' bytes are different!');
end;
Total Oldschool way, ich hoffe es gefällt Dir und löst Dein Problem!
Hier der link zur Quelle.
Falls "Nullen" zum Problem werden, schau in den anderen Code und passe das so an.

edit
PS: Und es tut mir leid das ich am Titel-Thema mehr als vorbeigerauscht sein sollte (beide Samples benötigen kein Indy und beide Samples enthalten keinen MemoryStream)
PPS: Hier ein HTTPS Ergebnis
Zitat:
HTTP/S HTML Source from: https://www.delphipraxis.net/
Downloaded: 35261 bytes, displaying: 36143 chars. -882 bytes are different!
Gruß vom KodeZwerg

Geändert von KodeZwerg (28. Apr 2018 um 03:00 Uhr) Grund: Code aktualisiert
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz