Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Mit IdHTTP wird die Seite unvollständig geladen (https://www.delphipraxis.net/196148-mit-idhttp-wird-die-seite-unvollstaendig-geladen.html)

bogdan 26. Apr 2018 11:56

Mit IdHTTP wird die Seite unvollständig geladen
 
Habe schon einiges hier gefunden und gelesen und auch gegoogelt, leider verstehe ich nicht wie ich das Problem lösen kann.

Mache eine einfache GET Anfrage mit der IDHTTP Komponente.

Code:
function GetHTMLCode(xUrl: String): String;
var
  xResult : TStringList;
begin
  xResult := TStringList.Create;
  try
    try
      xResult.Text := IdHTTP1.Get(xUrl);
    except
      on E: EIdHTTPProtocolException do
      begin
        xResult.Add('E.Message: ' + E.Message);
        xResult.Add('E.ErrorMessage:');
        xResult.Add(E.ErrorMessage);
      end;
    end;
  finally
    Result := xResult.Text;
    xResult.Free;
  end;
end;
95% der Seiten werden vollständig geladen. Ab und zu aber wird nur ein Teil der aufgerufenen Seiten ausgegeben. zb. 1/3 oder die Hälfte, das ist immer wieder unterschiedlich, d.h. ab und zu fehlt ein Teil des HTML-Codes in der TStringList Variable. Im FireFox oder Chrome wird der HTML-Code vollständig angezeigt.

Woran kann das liegen?

jaenicke 26. Apr 2018 12:46

AW: Mit IdHTTP wird die Seite unvollständig geladen
 
Wird der Code mittendrin abgeschnitten oder fehlen Teile mitten im Dokument? Bei letzterem Fall werden wohl schlicht Skripte die Teile hinzufügen.

bogdan 26. Apr 2018 13:08

AW: Mit IdHTTP wird die Seite unvollständig geladen
 
Der Code wird einfach abgeschnitten.

mjustin 26. Apr 2018 13:10

AW: Mit IdHTTP wird die Seite unvollständig geladen
 
Ist es eine Unicode-fähige Delphi Version? (Ab 2009)

bogdan 26. Apr 2018 13:16

AW: Mit IdHTTP wird die Seite unvollständig geladen
 
Ich nutze XE8 Enterprise

bogdan 26. Apr 2018 13:53

AW: Mit IdHTTP wird die Seite unvollständig geladen
 
Auf einer der Seiten wird der HTML Code nur bis zu einem "seltsamen" Zeichen angezeigt.

HolgerX 26. Apr 2018 13:55

AW: Mit IdHTTP wird die Seite unvollständig geladen
 
Hmm..

Handelt es sich um eine öffentliche URL?

Dann gebe sie mal zum Testen..

mjustin 26. Apr 2018 14:05

AW: Mit IdHTTP wird die Seite unvollständig geladen
 
Ist es die aktuellste Indy Version (10.6.2)?

mjustin 26. Apr 2018 14:09

AW: Mit IdHTTP wird die Seite unvollständig geladen
 
Vielleicht ein Seiteneffekt durch eine nicht sauber initialiserte Instanz - ich würde die TidHTTP Instannz nicht mehrmals verwenden sondern in der Funktion jeweils eine neue erzeugen.

Testweise könnte man das sicher schnell einbauen und sehen ob dann das Problem weiterhin besteht. Falls nein, ist irgendwas im unsichtbaren Code nicht korrekt.

bogdan 26. Apr 2018 14:11

AW: Mit IdHTTP wird die Seite unvollständig geladen
 
Ja, ist eine relativ "öffentliche" URL einer "Warez"-Seite.

https://ddl-warez.to/downloads/haupt...rt/D/seite/36/

Und vorab: ich bin nicht der, der die Inhalte dort hoch lädt. Die Inhalte dieser Seite werden für die "echten" Rechteinhaber benötigt.

bogdan 26. Apr 2018 14:12

AW: Mit IdHTTP wird die Seite unvollständig geladen
 
Die IdHTTP Instanz wir auch for dem Abruf der Seite auch immer neu erstellt.

bogdan 26. Apr 2018 14:22

AW: Mit IdHTTP wird die Seite unvollständig geladen
 
Zitat:

Zitat von mjustin (Beitrag 1400602)
Ist es die aktuellste Indy Version (10.6.2)?

Indy Version: 10.6.2.5263

HolgerX 26. Apr 2018 14:36

AW: Mit IdHTTP wird die Seite unvollständig geladen
 
Hmm..

OK, scheint ein Problem des Anzeige-Memos!

Habe die Länge des Textes vom Result-String (direkt vom Get) und vom Memo.Lines.Text verglichen.

Der Result-String ist 483164 Zeichen lang, der Text vom Memo 420676 Zeichen...
Eventuell wird da etwas geliefert, was das Memo als EOL (End of Line, in diesem Fall End of String) interpretiert.

HolgerX 26. Apr 2018 14:40

AW: Mit IdHTTP wird die Seite unvollständig geladen
 
Hmm..

Meine Vermutung ist richtig, an Position 420677 befindet sich ein #0 im Result-String!
Und da endet die Übernahme in die StringList..

bogdan 26. Apr 2018 14:42

AW: Mit IdHTTP wird die Seite unvollständig geladen
 
Hallo Holger,

schon mal danke für deine Mühen.

Unf wie kriege ich jetzt den kompletten Inhalt aus der INDY Komponente in ein String übergeben?

HolgerX 26. Apr 2018 14:46

AW: Mit IdHTTP wird die Seite unvollständig geladen
 
Hmm..

Um dein Beispiel zu nehmen:

Delphi-Quellcode:
function GetHTMLCode(xUrl: String): String;
begin
  Result := '';
  try
    Result := IdHTTP1.Get(xUrl);
  except
    on E: EIdHTTPProtocolException do
    begin
      Result := 'E.Message: ' + E.Message + #13#10;
      Result := Result +'E.ErrorMessage:' +#13#10;
      Result := Result + E.ErrorMessage;
    end;
  end;
end;

( Nur so hier im Browser geändert...)

Delphi.Narium 26. Apr 2018 14:49

AW: Mit IdHTTP wird die Seite unvollständig geladen
 
Alternativer Lösungsvorschlag:

Lade die Seite mal in 'nen MemoryStream und entferne ggfls. daraus die Hex 00, bevor Du das Ergebnis der Funktion als String zurückgibst.

TIDHttp hat 'ne überladene Funktion, mit der man die Daten in 'nen Stream bekommt.

Den Stream dann von Hex 00 bereinigen und dann per Stringliste.LoadFromStream(DeinStream) weiterverarbeiten.

bogdan 26. Apr 2018 14:50

AW: Mit IdHTTP wird die Seite unvollständig geladen
 
Hallo Holger,

ich kriege beim IdHTTP.GET Aufruf keine Exception, d.h. der HTML Code muss an der folgenden Position:
Code:
Result := IdHTTP1.Get(xUrl);
schon richtig ausgegeben werden.

bogdan 26. Apr 2018 15:11

AW: Mit IdHTTP wird die Seite unvollständig geladen
 
Habe die Funktion erst mal so umgeschrieben, bekomme aber so nur einen leeren String:

Code:
function GetHTMLCode(xUrl: String): String;
var
  xResult : TStringList;
  xResMemo : TMemoStream;
begin
  xResult := TStringList.Create;
  xResMemo : TMemoStream.Create;
  try
    try
      IdHTTP1.Get(xUrl, xResMemo);
      xResult.LoadFromStream(xResMemo);
    except
      on E: EIdHTTPProtocolException do
      begin
        xResult.Add('E.Message: ' + E.Message);
        xResult.Add('E.ErrorMessage:');
        xResult.Add(E.ErrorMessage);
      end;
    end;
  finally
    Result := xResult.Text;
    xResult.Free;
    xResMemo.Free;
  end;
end;

Delphi.Narium 26. Apr 2018 15:18

AW: Mit IdHTTP wird die Seite unvollständig geladen
 
Bitte eine Zeile einfügen:
Delphi-Quellcode:
      IdHTTP1.Get(xUrl, xResMemo);
      xResMemo.Position := 0; // <- das muss dazwischen!
      xResult.LoadFromStream(xResMemo);

bogdan 26. Apr 2018 15:31

AW: Mit IdHTTP wird die Seite unvollständig geladen
 
Hallo Delphi.Narium,

einen Sub-String in einem String zu ersetzen bzw. zu entfernen wäre jetzt kein Problem.

Ich verstehe nur nicht wie ich einen Hex Wert aus einem Stream entfernen soll wenn ich den Stream nicht in einen String umwandeln kann?

Delphi.Narium 26. Apr 2018 15:38

AW: Mit IdHTTP wird die Seite unvollständig geladen
 
'nen Stream kann man zeichenweise lesen und schreiben.

In 'ner Schleife prüfen, ob ein Zeichen eine Hex 00 ist, wenn ja z. B. durch Hex 32 (Blank) ersetzen.

Schau bitte mal in dem Umfeld: http://docwiki.embarcadero.com/RADSt..._und_schreiben

bogdan 26. Apr 2018 16:36

AW: Mit IdHTTP wird die Seite unvollständig geladen
 
Vielen Dank an Alle für die zahlreichen Tips. Jetzt funktioniert es. :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:30 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