WebClient

命名空间System.Net,WebClient是一种更高级别的抽象,是HttpWebRequest为了简化最常见任务而创建的,使用过程中你会发现他缺少基本的header,timeoust的设置,不过这些可以通过继承httpwebrequest来实现。相对来说,WebClient比WebRequest更加简单,它相当于封装了request和response方法,不过需要说明的是,Webclient和WebRequest继承的是不同类,两者在继承上没有任何关系。使用WebClient可能比HttpWebRequest直接使用更慢(大约几毫秒),但却更为简单,减少了很多细节,代码量也比较少。

public class WebClientHelper
  {
    public static string DownloadString(string url)
    {
      WebClient wc = new WebClient();
      //wc.BaseAddress = url;  //设置根目录
      wc.Encoding = Encoding.UTF8;  //设置按照何种编码访问,如果不加此行,获取到的字符串中文将是乱码
      string str = wc.DownloadString(url);
      return str;
    }
    public static string DownloadStreamString(string url)
    {
      WebClient wc = new WebClient();
      wc.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36");
      Stream objStream = wc.OpenRead(url);
      StreamReader _read = new StreamReader(objStream, Encoding.UTF8);  //新建一个读取流,用指定的编码读取,此处是utf-8
      string str = _read.ReadToEnd();
      objStream.Close();
      _read.Close();
      return str;
    }
 
    public static void DownloadFile(string url, string filename)
    {
      WebClient wc = new WebClient();
      wc.DownloadFile(url, filename);   //下载文件
    }
 
    public static void DownloadData(string url, string filename)
    {
      WebClient wc = new WebClient();
      byte [] bytes = wc.DownloadData(url);  //下载到字节数组
      FileStream fs = new FileStream(filename, FileMode.Create);
      fs.Write(bytes, 0, bytes.Length); 
      fs.Flush();
      fs.Close();
    }
 
    public static void DownloadFileAsync(string url, string filename)
    {
      WebClient wc = new WebClient();
      wc.DownloadFileCompleted += DownCompletedEventHandler;
      wc.DownloadFileAsync(new Uri(url), filename);
      Console.WriteLine("下载中。。。");
    }
    private static void DownCompletedEventHandler(object sender, AsyncCompletedEventArgs e)
    {
      Console.WriteLine(sender.ToString());  //触发事件的对象
      Console.WriteLine(e.UserState);
      Console.WriteLine(e.Cancelled);
      Console.WriteLine("异步下载完成!");
    }
 
    public static void DownloadFileAsync2(string url, string filename)
    {
      WebClient wc = new WebClient();
      wc.DownloadFileCompleted += (sender, e) =>
      {
        Console.WriteLine("下载完成!");
        Console.WriteLine(sender.ToString());
        Console.WriteLine(e.UserState);
        Console.WriteLine(e.Cancelled);
      };
      wc.DownloadFileAsync(new Uri(url), filename);
      Console.WriteLine("下载中。。。");
    }
  }

  

posted @ 2021-11-01 10:12  zq爱生活爱代码  阅读(226)  评论(0编辑  收藏  举报