2011-09-14 9 views
0

MacのオブザーバークラスのC++ XPCOMコンポーネントにエラーがあるかどうかを確認するためにステータスを使用しようとしています。プロキシ環境ではFirefox:プロキシ環境のOnStateChangeのステータスに問題がある

OnStateChange(
    nsIWebProgress *aWebProgress, 
    nsIRequest *aRequest, 
    PRUint32 aStateFlags, 
    nsresult aStatus) 
{ 

} 

aStatusパラメータは、ブラウザがページをロードするために失敗しても常に真です。

プロキシ以外の環境では、ステータスに適切な値(エラー)が与えられます。

http://10.1.3.3/(ランダムIP)にアクセスすると表示されます。プロキシの場合、ステータスはゼロ(成功)で、プロキシがなければエラー値が返されます。

適切なエラー値を得るためにいくつかのパラメータを設定する必要がありますか?

答えて

1

これは、HTTPプロキシを使用する場合に予想される動作です。 0以外の場合はaStatusは "何らかのエラーのため応答が得られませんでした"という意味です。一方、値が0の場合は、「何らかの応答があり、要求が成功したかどうかを確認するためにnsIHttpChannel.responseStatusをチェックしてください」という意味の「aStatus」という値です。サーバが "404 Not Found"と応答した場合、つまりaStatusは0になります(応答が返されます)が、nsIHttpChannel.responseStatusは404になります。

プロキシは常にHTTPプロキシと同じですサーバーに接続できなかった場合はおそらく "502 Bad Gateway"という応答を返します。これは、ブラウザが取得するものだそうaStatusはゼロになり、あなたがこのような何かをすべきコード内のnsIHttpChannel.responseStatusだから502を次のようになります。私はそれが動作を期待されていることを知らせるための

OnStateChange(
    nsIWebProgress *aWebProgress, 
    nsIRequest *aRequest, 
    PRUint32 aStateFlags, 
    nsresult aStatus) 
{ 
    if (FAILED(aStatus)) 
    { 
    // Got no response 
    } 
    else 
    { 
    nsCOMPtr<nsIHttpChannel> channel = do_QueryInterface(aRequest); 
    PRUint32 status = 0; 
    if (channel) 
     channel->GetResponseStatus(&status); 
    if (status >= 400) 
    { 
     // Got an HTTP error 
    } 
    else 
    { 
     // Success! 
    } 
    } 
} 
+0

感謝を – Swetha

関連する問題