![]() |
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. |
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:
|
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:
Und hier die WinApi Variante, sollte auch HTTPS tauglich sein.
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;
Delphi-Quellcode:
Total Oldschool way, ich hoffe es gefällt Dir und löst Dein Problem!
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; Hier der ![]() 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:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:34 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