0

Webページのヘッダーを取得しようとしています。以下のコードブロックがその役割を果たします。
ただし、ページが401拒否されると、ヘッダーをまったく取得できません。方法はありますか?

ありがとう

public Int32 CheckURLStatus(string uri, out HttpWebResponse _response)
    {
        //Get response header
        _response = null;
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
        HttpWebRequest _request = (HttpWebRequest)WebRequest.Create(uri);
        _request.Method = "GET";
        _request.AllowAutoRedirect = true;
        _request.Accept = "*/*";
        _request.MaximumAutomaticRedirections = 4;
        _request.UseDefaultCredentials = true;
        _request.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
        Int32 statusCode = 404;
        try
        {
            _response = (HttpWebResponse)_request.GetResponse();
            statusCode = Convert.ToInt32(_response.StatusCode);
        }
        catch (Exception ex)
        {
            _response = null;
        }
        return statusCode;
    }
4

1 に答える 1

0

200でないStatusCodeの場合、GetResponse()メソッドはWebExceptionをスローします。ステータスコードを取得するには、この例外を処理し、例外にある応答からStatusCodeを取得する必要があります。

WebExceptionの場合でも応答コードを取得するようにコードを変更しました。

public Int32 CheckURLStatus(string uri, out HttpWebResponse _response)
    {
        //Get response header
        _response = null;
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
        HttpWebRequest _request = (HttpWebRequest)WebRequest.Create(uri);
        _request.Method = "GET";
        _request.AllowAutoRedirect = true;
        _request.Accept = "*/*";
        _request.MaximumAutomaticRedirections = 4;
        _request.UseDefaultCredentials = true;
        _request.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
        Int32 statusCode = 404;
        try
        {
            _response = (HttpWebResponse)_request.GetResponse();
            statusCode = Convert.ToInt32(_response.StatusCode);
        }
        catch (WebException ex)
        {
            statusCode = Convert.ToInt32(((HttpWebResponse)ex.Response).StatusCode);
            _response = null;
        }
        return statusCode;
    }

また、ex.Response.Headersを確認すると、応答のHTTPヘッダーが表示されます。

于 2012-12-04T23:39:06.700 に答える