【问题标题】:Can't able to Download HTML of a Specific Website无法下载特定网站的 HTML
【发布时间】:2013-07-04 13:58:16
【问题描述】:

我正在使用 C# 控制台应用程序进行网络解析。

我的代码是:

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);

此代码在其他 URL 上运行良好,但是当我将 URL 更改为 http://watch.squidtv.net/ 时,出现了两个问题 -

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

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

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

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

【问题讨论】:

  • 它返回了什么?
  • 只有一些垃圾

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


【解决方案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();
        }

【讨论】:

    【解决方案2】:

    您可能必须在 WebRequest 中指定更多内容,以便 SquidTV 服务器知道将 HTML 发回给您。

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

    防火墙可能是另一个问题,因为您发送的请求可能不允许,因此没有任何返回。这就是我可能会建议使用 WireShark 或 Fiddler 等中间工具的地方,这些工具可能有助于查看请求是否至少发出。

    【讨论】:

    • 它只是下载了两次 HTML,然后又开始了同样的问题
    猜你喜欢
    • 1970-01-01
    • 2019-07-11
    • 1970-01-01
    • 2018-08-14
    • 1970-01-01
    • 2011-06-23
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多