Как проверить URL с помощью IdHTTP?

Как я могу проверить целевой URL для конкретного кода ответа, например, 200 OK, если Indy не выбрасывает всевозможные исключения. ConnectionTimeout, ConnectionClosedGracefully и т. Д. …

Например, если URL-адрес не является правильным или его хост не может быть найден или недоступен. Indy будет по-прежнему вырабатывать исключения, хотя я пытался игнорировать их.

Поэтому мой вопрос заключается в том, как правильно игнорировать эти исключения.

    1. Как игнорировать все исключения, брошенные TIdHTTP?

    Чтобы обрабатывать все исключения и, как вы говорите, игнорировать их, вы можете использовать код, который почти идентичен коду из ответа @ Stijn:

     procedure TForm1.Button1Click(Sender: TObject); var IdHTTP: TIdHTTP; begin IdHTTP := TIdHTTP.Create; try try IdHTTP.Get('http://www.example.com'); except // do just nothing here, if you really want to completely ignore all // exceptions thrown from inside the try..except block execution and // if you don't want to indicate somehow, that the exception occured end; finally IdHTTP.Free; end; end; 

    2. Как обращаться с конкретными исключениями, заданными TIdHTTP?

    Возможно, однажды вам захочется каким-то образом отреагировать на определенные типы исключений, TIdHTTP classом TIdHTTP , например, реагировать только на исключения HTTP-протокола. И вот что я попытаюсь здесь проработать.

    Indy определяет множество classов исключений для разных случаев, которые могут возникать, когда определенное действие терпит неудачу. Вот список classов исключений, которые могут вас заинтересовать, когда вы работаете с протоколом HTTP:

    1. EIdException – это базовый class исключений, используемый библиотекой Indy. Это может быть полезно для вас, если вы хотите различать исключения, поднятые Indy, и все другие исключения, которые вы выбрали приложением.

    2. EIdSocketError – из точки абстракции HTTP-протокола это class исключения низкого уровня, который охватывает все исключения, возникающие при сбое определенной операции сокета. Это может быть полезно для вас обнаружить, что на вашем сетевом уровне что-то не так.

    3. EIdConnClosedGracefully – исключения, поднятые этим classом, указывают на то, что серверная сторона закрыла соединение с клиентом обычным способом. Это может быть полезно, когда вам нужно будет реагировать на эту ситуацию, например, путем повторного подключения к серверу.

    4. EIdHTTPProtocolException – этот class исключений используется для исключений, возникающих при возникновении ошибки при обработке ответа HTTP для определенного запроса. Обычно это происходит, когда из ответа HTTP получен неожиданный числовой код ответа HTTP. Это может быть полезно, если вы хотите конкретно обрабатывать ошибки протокола HTTP. Благодаря этой обработке исключений вы можете, например, реагировать на определенные коды состояния HTTP, возвращаемые ответом сервера.

    Вот скелет кода, показывающий обработку исключений, перечисленных выше. Конечно, вам не нужно показывать сообщения, но делать что-то более полезное. И вам не нужно обращаться со всеми из них; на вас есть исключения и как вы справитесь:

     uses IdHTTP, IdException, IdStack; procedure TForm1.Button1Click(Sender: TObject); var IdHTTP: TIdHTTP; begin IdHTTP := TIdHTTP.Create; try try IdHTTP.Get('http://www.example.com'); except // this exception class covers the HTTP protocol errors; you may read the // response code using ErrorCode property of the exception object, or the // same you can read from the ResponseCode property of the TIdHTTP object on E: EIdHTTPProtocolException do ShowMessage('Indy raised a protocol error!' + sLineBreak + 'HTTP status code: ' + IntToStr(E.ErrorCode) + sLineBreak + 'Error message' + E.Message); // this exception class covers the cases when the server side closes the // connection with a client in a "peaceful" way on E: EIdConnClosedGracefully do ShowMessage('Indy reports, that connection was closed gracefully!'); // this exception class covers all the low level socket exceptions on E: EIdSocketError do ShowMessage('Indy raised a socket error!' + sLineBreak + 'Error code: ' + IntToStr(E.LastError) + sLineBreak + 'Error message' + E.Message); // this exception class covers all exceptions thrown by Indy library on E: EIdException do ShowMessage('Indy raised an exception!' + sLineBreak + 'Exception class: ' + E.ClassName + sLineBreak + 'Error message: ' + E.Message); // this exception class is a base Delphi exception class and covers here // all exceptions different from those listed above on E: Exception do ShowMessage('A non-Indy related exception has been raised!'); end; finally IdHTTP.Free; end; end; 

    Простая попытка / исключение должна сделать трюк:

     try IdHttp1.Get(...); Result:=IdHttp1.ResponseCode=200; except on EIdException do Result:=false; end; 
    Давайте будем гением компьютера.