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; 

попробовать http.head() вместо http.get().