2

こんにちは私はいくつかのページを見ているプログラムを持っています

for (int i=1; i < 1000; i++)
{
  string id = i.ToString();
  string url_source = get_url_source("http://mysite.com/"+id);
}

と方法

    public static string get_url_source(string url)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        System.IO.StreamReader sr = new System.IO.StreamReader(response.GetResponseStream());
        return sr.ReadToEnd();
    }

404-notfoundが発生したときにメインプログラムがそのURLをスキップして次のIDに進むように、メソッドを変更するにはどうすればよいですか?

ループをこれに変更しました

try
            {
                string url_source = get_url_source(url);
            }
            catch(WebException ex)
            {
                if (ex.Status == WebExceptionStatus.ProtocolError)
                {
                    ConsoleBox.Text += i + ": " + WebExceptionStatus.ProtocolError.ToString() + "\r\n";
                    continue;
                }
                else
                {
                    throw;
                }
            }
4

4 に答える 4

4

エラーをキャッチし、そのステータスを確認します。404 の場合はループを続行し、そうでない場合は再スローします。

for (int i=1; i < 1000; i++)
{
    string id = i.ToString();
    try
    {
         string url_source = get_url_source("http://mysite.com/"+id);
    }
    catch(WebException ex)
    {
        HttpWebResponse webResponse = (HttpWebResponse)ex.Response;          
        if (webResponse.StatusCode == HttpStatusCode.NotFound)
        {
            continue;
        }
        else
        {
            throw;
        }
    }

}
于 2012-12-17T14:28:21.650 に答える
2

GetResponseStream を実行するときにスローされる WebException をキャッチする必要があります。

try
{
   HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    System.IO.StreamReader sr = new System.IO.StreamReader(response.GetResponseStream());
    return sr.ReadToEnd();
}
catch (WebException webEx)
{
    //If you want only 404, some logic here
    //if (((HttpWebResponse)webEx.Response).StatusCode == HttpStatusCode.NotFound)
    //{
    //}
    //else
    //{
    //      throw;
    //}
    //webEx.Status;
}
于 2012-12-17T14:24:42.557 に答える
0

試してください: if (response.StatusCode == HttpStatusCode.OK)

于 2012-12-17T14:24:55.740 に答える
0

WebException を例外タイプとして、try/catch を使用します。ステータスをテストできます:

 ex.Response.StatusCode==HttpStatusCode.NotFound
于 2012-12-17T14:27:49.247 に答える