0

ここで 2 つの問題があります。だから私はあなたの助けが必要です。

  1. microsoft.com の応答コードの結果は、HTTP/1.1 403 Forbidden または HTTP/1.1 200 OK です。

    try 
    {
        IdHTTP->Get("http://www.microsoft.com");
        ListBox->Items->Add(IdHTTP->Response->ResponseCode);
    }
    catch (const EIdException &E) 
    {
        ListBox->Items->Add(E.Message);
        ListBox->Items->Add(IdHTTP->Response->ResponseText);
    }
    

    しかし、私がそれをチェックしたとき、http://web-sniffer.net/またはhttp://tools.seobook.com/server-header-checkerその結果はHTTP/1.1 302 Moved Temporarily.

    IdHTTP からの結果が上記の両方の URL と異なるのはなぜですか?. IdHTTP はどのようにして同じ http ステータス コードを達成できますか?.

  2. TListBox 内の EIdException / Exception の E.Message エラーを色付けして置き換えます。

    たとえば、私"Socket Error # 10061Connection refused""your connection is refused".

    ListBox->Items->Add(StringReplace(E.Message,"Socket Error # 10061Connection refused.","your connection is refused.",TReplaceFlags()<<rfReplaceAll));
    

    しかし、その方法を使用しても、結果は同じです。

これを読んでくれてありがとう。どんな助けや提案も大歓迎です!!

4

1 に答える 1

0

サイトのメンテナンス以外では、通常の状態でエラーがhttp://www.microsoft.com返されることはないと思います。403 Forbiddenしかし、他のサイトと同じように、それは時々起こる可能性があると思います. これは致命的なエラーです。その時点で URL にアクセスすることはできません (アクセスできたとしても)。

302 Moved TemporarilyHTTP リダイレクトです。TIdHTTP.OnRedirectイベントがトリガーされ、新しい URL が提供されます。TIdHTTP.HandleRedirectsプロパティが true の場合、またはイベントOnRedirectハンドラが true を返す場合、TIdHTTPは内部でリダイレクトを処理し、新しい URL を自動的に要求します。 TIdHTTP.Get()最終 URL に到達するか、エラーが発生するまで終了しません。

エラー処理に関して、発生したエラーの種類に基づいて表示するメッセージをカスタマイズしたい場合は、発生する可能性のあるさまざまな種類のエラーを実際に区別する必要があります。

try 
{
    IdHTTP->Get("http://www.microsoft.com");
    ListBox->Items->Add(IdHTTP->Response->ResponseCode);
}
catch (const EIdHTTPProtocolException &E) 
{
    // HTTP error
    // E.ErrorCode contains the ResponseCode
    // E.Message contains the ResponseText
    // E.ErrorMessage contains the content of the error body, if any

    ListBox->Items->Add(E.Message);
}
catch (const EIdSocketError &E)
{
    // Socket error
    // E.LastError contains the socket error code
    // E.Message contains the socket error message

    if (E.LastError == Id_WSAECONNREFUSED)
        ListBox->Items->Add("Your connection is refused");
    else
        ListBox->Items->Add(E.Message);
}
catch (const EIdException &E) 
{
    // any other Indy error
    ListBox->Items->Add(E.Message);
}
catch (const Exception &E) 
{
    // any other non-Indy error
    ListBox->Items->Add(E.Message);
}
于 2015-09-20T06:07:12.247 に答える