我正在用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
}
答案 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并解析响应流。