如何在C#中捕获代理错误(返回的HTML页面)

时间:2015-04-21 23:06:57

标签: c# .net httpwebrequest webclient

我正在用C#编写一个小程序来解析一个URL列表。主要目标是确定什么可以通过代理和什么不可以。我相信我已经完成了这一点。现在,我正在尝试确定代理阻止网站的原因。最终,此数据将导出到.csv以获取报告。我要留下一些细节,说明为什么我这样做是为了简明扼要。

我正在使用WebClient来测试每个站点。如果代理拒绝连接,我的程序将失败,但以下情况除外:

远程服务器返回错误:(403)Forbidden。

我可以轻松捕获异常并记录下来。但是,代理返回的HTML页面(如果我使用的是Web浏览器)有很多我想要捕获的信息(例如,网站的声誉,被阻止的类别等)。我想把它作为一个字符串捕获并用正则表达式解析它。我一直试图将这个HTML变成字符串。

要解释一下,对于未被阻止的URL,我可以轻松地将该页面的HTML捕获为字符串并进行解析。但是,对于被阻止的URL,我的程序会抛出异常。我浏览了异常,我发现代理通常会在阻塞的情况下返回到Web浏览器的HTML。

下面是我的一些代码。我刚刚开始,在完成之前还有一点要做,哈哈。谢谢!

        int counter = 0;
        string line; //Store each line of a text file (a URL)
        WebClient client = new WebClient();

        // Read the file line by line.
        System.IO.StreamReader file =
           new System.IO.StreamReader(txtPath.Text); //path to file with list of URLs
        while ((line = file.ReadLine()) != null)
        {
            Console.WriteLine(line); //for testing
            counter++;                
            string downloadString = client.DownloadString(line);
            Console.WriteLine(downloadString); //for testing
         }

1 个答案:

答案 0 :(得分:0)

经过一些试验错误和拖钓后,我想我有这个。

当然,我们想要捕获的任何异常都需要围绕相关代码进行try / catch块。在这种情况下:

string downloadString = client.DownloadString(line);

一旦我将错误记录为“WebException ex”,我就可以解析响应流:

string resp = new StreamReader(ex.Response.GetResponseStream()).ReadToEnd();
StringReader reader = new StringReader(resp);

此时,我需要将HTML作为String来操作以满足我的需求。在任何情况下,关键是将错误捕获为WebException并解析响应流。