Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi IdHTTP empfängt komische Zeichen von wikipedia (Bug?) (https://www.delphipraxis.net/172101-idhttp-empfaengt-komische-zeichen-von-wikipedia-bug.html)

atc 12. Dez 2012 17:42

Delphi-Version: XE2

IdHTTP empfängt komische Zeichen von wikipedia (Bug?)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich bin bei der Verwendung der Indy HTTP-Komponente auf ein komisches Problem gestoßen.

Folgender Code:
Delphi-Quellcode:
memo1.Text := idhttp1.Get('http://en.wikipedia.org/wiki/A');
memo2.Text := idhttp1.Get('http://en.wikipedia.org/wiki/B');
Erzeugt diese Ausgabe: siehe Anhang.

Also das eine Dokument wird korrekt abgerufen und das andere nicht. Mit einem HTTP-Sniffer habe ich gesehen, dass die Antwort von wikipedia vollständig übertragen wird, also muss es ein Bug der Komponente sein, oder woran könnte es sonst liegen?

10.5.9.0 ist meine Indy Version.

Das Problem scheint auch nur bei der Seite http://en.wikipedia.org/wiki/A aufzutreten :gruebel:

atc 12. Dez 2012 18:54

AW: IdHTTP empfängt komische Zeichen von wikipedia (Bug?)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Kleiner Nachtrag: Mit Delphi 2007 und Indy 10.1.5 tritt das gleiche Problem auf.

Wenn ich die Antwort in einer Datei speichere:
Delphi-Quellcode:
fs:=tfilestream.Create('c:\a1.txt',fmcreate);
idhttp1.Get('http://en.wikipedia.org/wiki/A',fs);
fs.Free;
erhalte ich eine Datei wie im Anhang zu sehen.

Immer nur bei der Seite http://en.wikipedia.org/wiki/A

Wie kann das sein? Kann das jemand reproduzieren?

Zacherl 12. Dez 2012 19:15

AW: IdHTTP empfängt komische Zeichen von wikipedia (Bug?)
 
Kann ich auch bei 10.5.9.0 bestätigen. Sieht für mich nach einem Encodingproblem aus.

Klaus01 12. Dez 2012 19:33

AW: IdHTTP empfängt komische Zeichen von wikipedia (Bug?)
 
.. ich habe die Seite mal mit wget heruntergeladen.

Die Datei beginnt mit 1F 8B 08 (das ist die Signatur eines komprimierten Files).
Wenn man die Datei nun mit gunzip dekomprimiert bekommt man lesbaren html code.

Grüße
Klaus

atc 12. Dez 2012 19:40

AW: IdHTTP empfängt komische Zeichen von wikipedia (Bug?)
 
Danke, ich dachte immer Indy erledigt das mit dem (de)komprimieren automatisch...
Bleibt nur noch die Frage, warum gerade diese Seite komprimiert übertragen wird und alle anderen nicht?

geskill 15. Dez 2012 18:17

AW: IdHTTP empfängt komische Zeichen von wikipedia (Bug?)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hey,
bei deinem GET-Request solltest du mal schauen wie dein Request.AcceptEncoding Header aussieht.

Das Stichwort ist gzip. Ist dies gesetzt wird dem Server mitgeteilt, dass er die Daten auch Komprimiert senden kann, da die Client-seite das Dekomprimieren kann.
Code:
deflate, gzip, identity, *;q=0
Damit die Indy HTTP Komponente das Dekomprimieren kann muss du lediglich eine Instanz von TIdCompressorZLib erstellen und der Compressor Eigenschaft der TidHTTP Klasse zuweisen.

Bei mir (Rev. 4861) klappt alles 1A.

Sowas kann man sich am besten auch immer per Wireshark ansehen. Auf der linken Seite der Request ohne gzip im Header, zur rechten mit der TIdCompressorZLib Klasse.

Grüße


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