Ответ 1
TIdHTTP.Head()
- лучший вариант.
Однако, в качестве альтернативы, в последней версии вы можете вызвать TIdHTTP.Get()
с nil
местом назначения TStream
или TIdEventStream
без назначенных обработчиков событий, и TIdHTTP
все равно будет читать данные сервера, но не храните его где угодно.
В любом случае, имейте в виду, что если сервер отправляет обратно код ответа об ошибке, TIdHTTP
вызовет исключение (если вы не используете параметр AIgnoreReplies
для указания конкретных значений кода ответа, которые вы хотите игнорировать), поэтому вам следует учтите это, например:
procedure Button1Click(Sender: TObject);
var
http : TIdHttp;
url : string;
code : integer;
begin
url := 'http://www.WEBSITE.com';
http := TIdHTTP.Create(nil);
try
try
http.Head(url);
code := http.ResponseCode;
except
on E: EIdHTTPProtocolException do
code := http.ResponseCode; // or: code := E.ErrorCode;
end;
ShowMessage(IntToStr(code));
finally
http.Free;
end;
end;
procedure Button2Click(Sender: TObject);
var
http : TIdHttp;
url : string;
code : integer;
begin
url := 'http://www.WEBSITE.com';
http := TIdHTTP.Create(nil);
try
try
http.Get(url, nil);
code := http.ResponseCode;
except
on E: EIdHTTPProtocolException do
code := http.ResponseCode; // or: code := E.ErrorCode;
end;
ShowMessage(IntToStr(code));
finally
http.Free;
end;
end;
ОБНОВЛЕНИЕ: чтобы избежать появления EIdHTTPProtocolException
при сбоях, вы можете включить флаг hoNoProtocolErrorException
в свойстве TIdHTTP.HTTPOptions
:
procedure Button1Click(Sender: TObject);
var
http : TIdHttp;
url : string;
code : integer;
begin
url := 'http://www.WEBSITE.com';
http := TIdHTTP.Create(nil);
try
http.HTTPOptions := http.HTTPOptions + [hoNoProtocolErrorException];
http.Head(url);
code := http.ResponseCode;
ShowMessage(IntToStr(code));
finally
http.Free;
end;
end;
procedure Button2Click(Sender: TObject);
var
http : TIdHttp;
url : string;
code : integer;
begin
url := 'http://www.WEBSITE.com';
http := TIdHTTP.Create(nil);
try
http.HTTPOptions := http.HTTPOptions + [hoNoProtocolErrorException];
http.Get(url, nil);
code := http.ResponseCode;
ShowMessage(IntToStr(code));
finally
http.Free;
end;
end;