web-dev-qa-db-ja.com

HttpWebRequestおよびHttpWebResponseからHTTPステータスコード番号(200、301、404など)を取得する

HttpWebResponseから返されたHttpWebRequestオブジェクトからHTTPステータスコード番号を取得しようとしています。テキストの説明ではなく実際の数字(200、301、302、404など)を取得したいと考えていました。 ( "Ok"、 "MovedPermanently"など)応答オブジェクトのどこかにあるプロパティに数値が埋め込まれていませんか?大きなスイッチ機能を作成する以外のアイデアはありますか?ありがとう。

HttpWebRequest webRequest = (HttpWebRequest)WebRequest
                                           .Create("http://www.gooogle.com/");
webRequest.AllowAutoRedirect = false;
HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse();
//Returns "MovedPermanently", not 301 which is what I want.
Console.Write(response.StatusCode.ToString());
267
James Lawruk
Console.Write((int)response.StatusCode);

HttpStatusCoderesponse.StatusCodeの型)は、メンバーの値がHTTPステータスコードと一致する列挙です。

public enum HttpStatusCode
{
    ...
    Moved = 301,
    OK = 200,
    Redirect = 302,
    ...
}
358
dtb

注意が必要です、4xxから5xxの範囲のサーバーの応答はWebExceptionをスローします。それをキャッチしてから、WebExceptionオブジェクトからステータスコードを取得する必要があります。

try
{
    wResp = (HttpWebResponse)wReq.GetResponse();
    wRespStatusCode = wResp.StatusCode;
}
catch (WebException we)
{
    wRespStatusCode = ((HttpWebResponse)we.Response).StatusCode;
}
236
zeldi

'dtb'によると、HttpStatusCodeを使う必要がありますが、 'zeldi'に従うと、コード応答が400以上の場合は特に注意が必要です。

これは私のために働きました:

HttpWebResponse response = null;
HttpStatusCode statusCode;
try
{
    response = (HttpWebResponse)request.GetResponse();
}
catch (WebException we)
{
    response = (HttpWebResponse)we.Response;
}

statusCode = response.StatusCode;
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
sResponse = reader.ReadToEnd();
Console.WriteLine(sResponse);
Console.WriteLine("Response Code: " + (int)statusCode + " - " + statusCode.ToString());
16

StatusCodeintに強制変換するだけです。

var statusNumber;
try {
   response = (HttpWebResponse)request.GetResponse();
   // This will have statii from 200 to 30x
   statusNumber = (int)response.StatusCode;
}
catch (WebException we) {
    // Statii 400 to 50x will be here
    statusNumber = (int)we.Response.StatusCode;
}
9
Marc
//Response being your httpwebresponse
Dim str_StatusCode as String = CInt(Response.StatusCode)
Console.Writeline(str_StatusCode)
3
prestigious