无法下载特定网站的HTML

时间:2013-07-04 13:58:16

标签: c# asp.net visual-studio-2010 visual-studio-2008

我正在使用C#控制台应用程序进行webparsing。

我的代码是:

var req = WebRequest.Create("http://watch.squidtv.net/");
req.BeginGetResponse(r =>
{
     var response = req.EndGetResponse(r);
     var stream = response.GetResponseStream();
     var reader = new StreamReader(stream, true);
     var str = reader.ReadToEnd();
     Console.WriteLine(str);
}, null);

此代码与其他网址一致正常,但当我将网址更改为http://watch.squidtv.net/时,又发生了两个问题 -

第一个 - 它没有下载它的HTML 第二个 - 它产生一个CPU声音。

然后我更改了代码并使用了像这样的webClient -

string htmlCode = "";
htmlCode = client.DownloadString("http://watch.squidtv.net");
Console.WriteLine(htmlCode);

但问题是一样的:(
可能是什么问题???

2 个答案:

答案 0 :(得分:1)

我找到了解决方案 问题是HTML标题中的HTML标题有gzip对象编码httpwebrequest不接受gzip标题导致问题,当我使用此代码时问题解决了

   HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://watch.squidtv.net/");
        req.Headers[HttpRequestHeader.AcceptEncoding] = "gzip, deflate";
        req.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
        req.Method = "GET";
        req.UserAgent = "Mozilla/5.0 (Windows; U; MSIE 9.0; WIndows NT 9.0; en-US))";
        string htmlCode;
        using (StreamReader reader = new StreamReader(req.GetResponse().GetResponseStream()))
        {
            htmlCode = reader.ReadToEnd();
        }

答案 1 :(得分:0)

您可能需要在WebRequest中指定更多内容,以便SquidTV服务器可以知道向您发回一个想法的HTML。

考虑到在浏览器中有很多标头被发送到服务器。如果您想查看,请使用FiddlerWireShark查看已发送的所有额外数据。

防火墙可能是另一个问题,因为您发出的请求可能不被允许,因此没有任何回复。这就是我可能会建议像WireShark或Fiddler这样的中间工具的地方,这些工具可能对查看请求是否至少出现非常有用。