IdHttp Просто Получить Код Ответа
Я использую idhttp (Indy) для проверки некоторых веб-сайтов. Все, что я хочу, это проверить код ответа с сервера после отправки моего запроса, я не хочу фактически получать вывод HTML с сервера, поскольку я отслеживаю только код 200 OK, любой другой код означает, что есть проблема какой-то формы.
Я искал справочные документы idhttp, и единственный способ, которым я мог бы это сделать, - это назначить код MemoryStream
и затем просто очистить его сразу, однако, это не очень эффективно и использует память, которая не нужна. Есть ли способ просто позвонить на сайт и получить ответ, но игнорировать HTML, отправленный обратно, что более эффективно и не тратит память?
В настоящее время код будет выглядеть примерно так. Однако это всего лишь пример кода, который я еще не тестировал, я просто использую его, чтобы объяснить, что я пытаюсь сделать.
Procedure Button1Click(Sender: TObject);
var
http : TIdHttp;
s : TStream;
url : string;
code : integer;
begin
s := TStream.Create();
http := Tidhttp.create();
url := 'http://www.WEBSITE.com';
try
http.get(url,s);
code := http.ResponseCode;
ShowMessage(IntToStr(code));
finally
s.Free();
http.Free();
end;
2 ответов
TIdHTTP.Head()
Это лучший вариант. Однако, в качестве альтернативы, в последней версии вы можете позвонить TIdHTTP.Get()
С нулевым назначением TStream
или TIdEventStream
без назначенных обработчиков событий, и он все равно будет считывать данные сервера, но не хранить их нигде.
в любом случае, также имейте в виду, что если сервер отправляет ответный код сбоя, TIdHTTP вызовет исключение (если вы не используете AIgnoreReplies
параметр для указания конкретных значений ResponseCode, которые вас интересуют), поэтому вы также должны учитывать это, например:
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;