Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Ico Datei vom Webserver holen (https://www.delphipraxis.net/172881-ico-datei-vom-webserver-holen.html)

Shark99 26. Jan 2013 23:24

Ico Datei vom Webserver holen
 
Hallo!

ich habe Probleme eine Ico Datei von einem bestimmten Webserver zu holen (andere Server funktionieren).

Es liegt nicht am Server selbst, weil wget per Command Line kein Problem damit hat:
Delphi-Quellcode:

c:\a>wget http://perforce.eigenbase.org:8080/favicon.ico
SYSTEM_WGETRC = c:/progra~1/wget/etc/wgetrc
syswgetrc = c:/progra~1/wget/etc/wgetrc
--2013-01-27 00:12:39--  http://perforce.eigenbase.org:8080/favicon.ico
Resolving perforce.eigenbase.org... 72.14.190.177
Connecting to perforce.eigenbase.org|72.14.190.177|:8080... connected.
HTTP request sent, awaiting response... 200 No headers, assuming HTTP/0.9
Length: unspecified
Saving to: `favicon.ico'

    [ <=>                                  ] 2.862       --.-K/s  in 0s

2013-01-27 00:12:40 (143 MB/s) - `favicon.ico' saved [2862]
Das ganze mit Indy 9 oder Indy 10 liefert nur eine "Connection Closed Gracefully" Exception.

Hier der Code:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var s: string;
begin
  s := '';
  try
     s := IdHTTP1.Get('http://perforce.eigenbase.org:8080/favicon.ico');
  except
     on E: Exception do
     begin
          {$IFDEF DEBUG}ShowMessage('get error:'+E.Message){$ENDIF};
     end;
  end;
  ShowMessage(IntToStr(Length(s)));
end;
Nehme ich einen anderen Server, z.B.

s := IdHTTP1.Get('http://www.delphipraxis.net/favicon.ico');

Dann funktioniert es wunderbar (bekomme einen String der Länge 1150 zurück).

sx2008 26. Jan 2013 23:44

AW: Ico Datei vom Webserver holen
 
Der Server perforce.eigenbase.org:8080 hat offensichtlich einen Bug.
Bei anderen Anfragen liefert der Server korrekte HTTP 1.0 Header mit; nur nicht bei der Datei favicon.ico.
Code:
Server: P4Web/2009.2/LINUX26X86_64/228098
Wahrscheinlich ist der Server, ebenso wie der Linux-Kernel 2.6, veraltet.
Der Firefox-Browser (und wahrscheinlich auch alle anderen Browser) kann deshalb das Icon auch nicht runterladen.

Shark99 26. Jan 2013 23:46

AW: Ico Datei vom Webserver holen
 
Das hatte ich leider schon befürchtet. Ich hatte bei 1000 Servern etwa 10 die sich so verhalten.

Gibt es eine Lösung? WGet bekommt es ja hin.

sx2008 26. Jan 2013 23:59

AW: Ico Datei vom Webserver holen
 
Man kann natürlich murksen.
Wenn der normale Weg über IdHTTP nicht funktioniert dann kann man den Datendialog selbst in die Hand nehmen.
Eine TCP/IP-Verbindung zu perforce.eigenbase.org Port 8080 öffnen und folgende Anfrage schicken:
Delphi-Quellcode:
var
  request : Ansistring;
begin
  request := 'GET /favicon.ico HTTP/1.0'#13#10+
  'Host: perforce.eigenbase.org:8080'#13#10+
  'User-Agent: Mozilla/5.0 '#13#10#13#10;
Was dann als Antwort vom Server kommt sind direkt die Daten der Resource favicon.ico.

Aber eigentlich sollte man die Admins anschreiben und mitteilen, dass ihr P4Web-Server veraltet ist.

Shark99 27. Jan 2013 02:22

AW: Ico Datei vom Webserver holen
 
Habe einen vielsprechenden Work-Around gefunden, und zwar scheinen die Daten in IdHTTP1.ResponseText zu stecken.

Die ersten 30 Bytes von der Datei die ich mit wget bekomme und IdHTTP1.ResponseText sind laut Debugger gleich.

Das Problem: die mit wget geholte Datei hat 2862 Bytes, die Länge von ResponseText ist nur 2316 Bytes lang.


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