Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Mit IdHTTP Seite aufrufen und an MemoryStream übergeben = Zeichen fehlerhaft (https://www.delphipraxis.net/196160-mit-idhttp-seite-aufrufen-und-memorystream-uebergeben-%3D-zeichen-fehlerhaft.html)

Neutral General 27. Apr 2018 21:53

AW: Mit IdHTTP Seite aufrufen und an MemoryStream übergeben = Zeichen fehlerhaft
 
Liste der Anhänge anzeigen (Anzahl: 1)
Siehe Bild.

Und 0-Bytes aus einem AnsiString rauszufiltern ist nie Sinn der Sache.

KodeZwerg 27. Apr 2018 22:04

AW: Mit IdHTTP Seite aufrufen und an MemoryStream übergeben = Zeichen fehlerhaft
 
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!

KodeZwerg 28. Apr 2018 00:57

AW: Mit IdHTTP Seite aufrufen und an MemoryStream übergeben = Zeichen fehlerhaft
 
Hallo nochmal,
hier zwei neue Samples die auch HTTPS Unterstützen, diesmal sollte nichts schiefgehen, aber mal abwarten was so kommt :lol:
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 :P
Zitat:

HTTP/S HTML Source from: https://www.delphipraxis.net/
Downloaded: 35261 bytes, displaying: 36143 chars. -882 bytes are different!


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:52 Uhr.
Seite 3 von 3     123   

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