【问题标题】:C# Read webpage content StreamreaderC# 读取网页内容 Streamreader
【发布时间】:2011-10-03 03:25:08
【问题描述】:

我需要像这样在流式阅读器中阅读网页的内容

www.example.com

<test>
<sample></sample>
</test>

我明白了:

System.IO.StreamReader StreamReader1 =
new System.IO.StreamReader("www.example.com");
string test = StreamReader1.ReadToEnd();

然后我得到这个错误代码

尝试访问该方法失败: System.IO.StreamReader..ctor(System.String)

【问题讨论】:

    标签: c# url web streamreader


    【解决方案1】:

    试试WebClient,它更简单,您不必担心溪流和河流:

    using (var client = new WebClient())
    {
        string result = client.DownloadString("http://www.example.com");
        // TODO: do something with the downloaded result from the remote
        // web site
    }
    

    【讨论】:

      【解决方案2】:

      如果你想使用 StreamReader,这里是我正在使用的代码:

          const int Buffer_Size = 100 * 1024;
      
      
              WebRequest request = CreateWebRequest(uri);
              WebResponse response = request.GetResponse();
              result = GetPageHtml(response);
      

      ...

          private string GetPageHtml(WebResponse response) {
              char[] buffer = new char[Buffer_Size];
              Stream responseStream = response.GetResponseStream();
              using(StreamReader reader = new StreamReader(responseStream)) {
                int index = 0;
                int readByte = 0;
                do {
                    readByte = reader.Read(buffer, index, 256);
                    index += readByte;
                }
                while (readByte != 0);
                response.Close();
              }
              string result = new string(buffer);
              result = result.TrimEnd(new char[] {'\0'});
              return result;
          }
      

      【讨论】:

      • 如果在所有这些代码中间抛出异常怎么办?你会把所有那些将内存泄漏到沙漠中的溪流留下吗?另外,您真的是在编写所有这些代码来下载远程网页吗?
      • 据我所知,异常可以在 reader.Read 方法中抛出。因此,它可以被 try ... finally 括号或 using 包围。此外,我真的在大约 1 年前编写了这段代码,以下载一个广告网站内容以分析它。我已经更改了代码。
      • 我们编写的任何一行代码都可能随时抛出异常。这就是为什么应该始终确保正确处置 IDisposable 对象(例如流)的确切原因:通过使用 using 块。但是在这种特殊情况下,当 .NET 框架已经为我们提供了它时,为什么要重新发明轮子并编写所有这些代码:WebClient,如我的回答所示。
      • 您的解决方案更好,因为它更短。只需一行代码。我在这里写了它,因为有时能够更改 MS 提供的方法的一部分变得很重要。这里的例子很简单。您可以将所需的编码传递给 StreamReader 构造函数,而不要依赖尝试猜测编码本身的 WebClient 的 DownloadString 方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-01
      • 2014-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多