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

尝试:如果(response.StatusCode == HttpStatusCode.OK)

于 2012-12-17T14:24:55.740 回答
0

使用 try/catch,将 WebException 作为异常类型。您可以测试状态:

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