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
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#21

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

  Alt 27. Apr 2018, 22:53
Siehe Bild.

Und 0-Bytes aus einem AnsiString rauszufiltern ist nie Sinn der Sache.
Miniaturansicht angehängter Grafiken
unterschied.jpg  
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

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

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

  Alt 27. Apr 2018, 23:04
Ohhh oder viel besser Uhhhnicode ok, ich fange an zu verstehen und lerne daraus, Danke!

edit
Ich habe mal eine mini-Kontrolle eingebaut um zu schauen ob was verloren geht, Memo1 scheint bei diesen Korea Zeichen mehr Chars zu verwenden als reinkommen oder ist das wegen CRLF?
Delphi-Quellcode:
  i := Length(Memo1.Lines.Text) ;
  Memo1.Lines.Add('HTTP HTML Source from: '+Temp1);
  Memo1.Lines.Add('Downloaded: '+IntToStr(Length(Temp2)) +' bytes, displaying: ' +IntToStr(i)+ ' chars. ' +IntToStr(Length(Temp2)-i)+ ' bytes are lost!');
Zitat:
HTTP HTML Source from: http://www.visitkorea.or.kr/intro.html
Downloaded: 7263 bytes, displaying: 7427 chars. -164 bytes are lost!
Gruß vom KodeZwerg

Geändert von KodeZwerg (28. Apr 2018 um 00:23 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

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

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

  Alt 28. Apr 2018, 01: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 04:00 Uhr) Grund: Code aktualisiert
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 00:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz