0

我正在使用 WebClient 的 DownloadString 功能将网页的 HTML 源代码存储到 C# Web 应用程序 (ASPX) 中的字符串中。问题是当字符串到达​​具有 URL 的 HTML 源的一部分时,它似乎正在结束。

我尝试将字符串写入文本文件,这就是它的结束方式:

<body class="page">
    <div id="container">
      <div id="header">
      <a href="http://

原始 Web 源代码在此之后大约有 50 行,我的应用程序不包含这些代码。它甚至没有完成它引导我认为斜线是 C# 中的某种字符串中断序列的行吗?

为了排除故障,我尝试了 WebClient DownloadFile 并将我指定网址的 HTML 源代码直接保存到文本文件中。这行得通,并且数据没有被截断。但是,当我尝试将此文本文件读取为字符串时,发生了同样的事情。

有任何想法吗?我已经花了几个小时在网上搜索并四处寻找,但我无法弄清楚!我还尝试了将数据从 URL 写入字符串的替代方法,但是发生了同样的问题。

提前致谢。

4

2 回答 2

0

使用 Fiddler 拦截 HTTP 请求并查看服务器发回给您的内容。如果 Fiddler 显示的响应内容与 DownloadString 相同,那么您的问题出在服务器上。否则就是你的客户。

也许您可以使用 DownloadData 而不是 DownloadString?

于 2014-02-16T13:09:30.030 回答
0

我终于想通了,并认为我会发布我的解决方案以供其他人参考。

在进一步弄乱它之后,我找到了使用以下代码的解决方法(由这篇文章提供:无法获取网页)......

    StringBuilder sb  = new StringBuilder();
    byte[]        buf = new byte[8192];
    HttpWebRequest  request  = (HttpWebRequest)
        WebRequest.Create(url);
    HttpWebResponse response = (HttpWebResponse)
        request.GetResponse();
    Stream resStream = response.GetResponseStream();
    string tempString = null;
    int    count      = 0;
    do
    {
        count = resStream.Read(buf, 0, buf.Length);
        if (count != 0)
        {
            tempString = Encoding.ASCII.GetString(buf, 0, count);
            sb.Append(tempString);
        }
    }
    while (count > 0);
    Console.WriteLine(sb.ToString());

我仍然不完全清楚为什么需要这种解决方法,但我很高兴找到了解决方案!

于 2014-02-18T10:01:08.247 回答