Ich habe eben mehrere Stunden nach einem Crash in meiner App gesucht.
Dabei ist der Http Client bei einer bestimmten
URI in einer Endlosschleife steckengeblieben.
Das Problem betrifft nur die Version aus dem
SVN, also
Indy 10 Build 4915.
Indy 10 Build 3962 in einer anderen VM hat das Problem nicht, verhält sich aber merkwürdig.
Hier ist der Code:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var HTTPCLIENT1: TIdHTTP;
begin
try
try
HTTPCLIENT1 := TIdHTTP.Create(
nil);
HTTPCLIENT1.Request.UserAgent := '
Mozilla/3.0 (compatible; Test)';
Memo1.Text := HTTPCLIENT1.Get(('
http://www.grecehotels.com/favicon.ico'));
except
On e:
Exception do
Memo1.Text := '
Exception: '+e.
Message;
end;
finally
HTTPCLIENT1.Free;
end;
end;
Indy 10 Build 4915 hängt wie gesagt in einer Endlosschleife (was ganz Böse in einem Thread sein kann, weil der nicht mehr ansprechbar ist).
Eine Änderung des Code auf den Default User Agent:
HTTPCLIENT1.Request.UserAgent := 'Mozilla/3.0 (compatible; Indy Library)';
behebt das Problem - es gibt ein
HTTP/1.1 403 Forbidden zurück.
Indy 10 Build 3962 verhält sich auch etwas merkwürdig.
HTTPCLIENT1.Request.UserAgent := 'Mozilla/3.0 (compatible; Indy Library)';
ergibt ein
HTTP/1.1 403 Forbidden,
wohingegen
HTTPCLIENT1.Request.UserAgent := 'Mozilla/3.0 (compatible; Test)';
ein
HTTP/1.1 404 Not Found liefert, was zwar nicht korrekt, aber allemal besser
als eine Endlosschleife ist!