Einzelnen Beitrag anzeigen

Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#18

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

  Alt 27. Apr 2018, 18:12
Hallo bogdan,
gut wäre ein Projekt-Upload gewesen für alle Properties (die stehen in der .dfm Datei) die Du so gesetzt hast.
Auch gut zu Wissen was in Edit1.Text steht, nur eine blanko Webadresse ohne Endung?
Soll das Ziel sein den HTML Source-Code zu laden oder eine bestimmte Datei?


edit
Hier ein Beispiel um HTTP HTML Sourcecode zu laden:
Delphi-Quellcode:
function DownloadHTMLSource( var xUrl : ansiString ):ansiString;
const
  INET_USERAGENT = 'Mozilla/4.0, Indy Library (Windows; en-US)'; // Damit sagst Du "Hallo, ich bin..."
  INET_TIMEOUT_SECS = 3; // Wieviele Sekunden warten bevor Timeout kommt?
  INET_REDIRECT_MAX = 10; // Maximale Redirect-Tiefe
begin
 with tIdHttp.create(nil) do begin // Create Indy http object
  request.userAgent := INET_USERAGENT; // Custom user agent string
  redirectMaximum := INET_REDIRECT_MAX; // Maximum redirects
  handleRedirects := INET_REDIRECT_MAX<>0; // Handle redirects
  readTimeOut := INET_TIMEOUT_SECS*1000; // Read timeout msec
  try // Catch errors
   Result := Get(xUrl); // Do the request
   if URL.Port = '80then URL.Port := ''; // Remove port 80 from final URL
   xUrl := URL.GetFullURI // Return final URL <<- da könnte nun eine andere URL stehen als wie Du eingegeben hast
  except // Return an error message if failed
    on E: Exception do
    Result := 'Error! HTTP Adress: ' +xUrl+ #13#10 + 'E.Message: ' + E.Message; // Return Error Message
  end;
  free // Free the http object
 end
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  temp1, temp2: ansiString;
  i : Integer;
begin
  Memo1.Clear;
  Memo1.Lines.Add('Working...');
  Temp1 := Edit1.Text;
  if Length(Edit1.Text) > 0 then Temp2 := DownloadHTMLSource(Temp1);
  // hier noch irgendwas mit ansiString anstellen, zum Beispiel nullen entfernen
  for I := 1 to Length(Temp2) do
    if Temp2[i] = Char(Ord($00)) then Temp2[i] := Char(Ord($20));
  Memo1.Lines.Text := Temp2;
  Memo1.Lines.Add('HTTP HTML Source from: '+Temp1);
end;
Alles noch unoptimiert aber vielleicht ist es ja das was Du wolltest?
Viel Spass damit.
Ps: Diesen Code solltest Du in einem leeren Projekt testen ohne Indy Komponenten aufm Formular aber in Uses.
Gruß vom KodeZwerg

Geändert von KodeZwerg (27. Apr 2018 um 19:55 Uhr)
  Mit Zitat antworten Zitat