将HTML源从外部URL写入字符串

时间:2014-02-16 12:34:30

标签: c# html string webclient downloadstring

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

我尝试将字符串写入文本文件,结果如下:

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

原始网络源代码在此之后大约有50行,我的应用程序不包括。它甚至没有完成它的导致我认为斜杠是C#中某种字符串中断序列的可能吗?

要进行故障排除我尝试了WebClient DownloadFile并将我指定网址的HTML源直接保存到文本文件中。这有效,数据没有被截断。当我尝试将这个文本文件读成字符串时,同样的事情发生了。

有什么想法吗?我花了几个小时在网上搜索和填充,我无法弄清楚这一点!我还尝试了将数据从URL写入字符串的替代方法,但是会出现同样的问题。

提前致谢。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

在进一步搞砸之后,我找到了一个使用以下代码的解决方法(由这篇帖子提供:Unable to Fetch a Webpage)...

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

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