zoukankan      html  css  js  c++  java
  • WebClient与WebRequest差异

    WebClient和HttpWebRequst是用来获取数据的2种方式,一般而言,WebClient更倾向于“按需下载”,事实上掌握它也是相对容易的,而HttpWebRequst则允许你设置请求头或者对内容需要更多的控制,后者有点类似于form中的submit。虽然两者都是异步请求事件,但是WebClient是基于事件的异步,而HttpWebRequst是基于代理的异步编程

    WebClient封装了一下便于使用,但是需要稍微细节一些的操作的时候,就得用WebResponse和WebRequest来操作了。比如要想控制TCP链接数,自定义HTTP请求头或者Post自定义数据等等,HTTPWebRequest是专用于HTTP协议的WebRequest,想要灵活性选择后者,简单性选择前者,2.0里提供了FtpWebResponse...FileWebResponse,用起来可能选择范围更广点。

    举例如下:

    例如用WebClient类实现
    PageUrl = UrlText.Text;
    WebClient wc = new WebClient();
    wc.Credentials = CredentialCache.DefaultCredentials;

    Byte[] pageData = wc.DownloadData(PageUrl);
    ContentHtml.Text = Encoding.Default.GetString(pageData);

    用WebRequest类实现
    PageUrl = UrlText.Text;
    WebRequest request = WebRequest.Create(PageUrl);
    WebResponse response = request.GetResponse();
    Stream resStream = response.GetResponseStream();
    StreamReader sr = new StreamReader(resStream, System.Text.Encoding.Default);
    ContentHtml.Text = sr.ReadToEnd();
    resStream.Close();
    sr.Close();

    这两段代码实现同样功能,区别在哪里? WebRequest类
    命名空间: System.Net

    发出对统一资源标识符 (URI) 的请求。这是一个抽象(在 Visual Basic 中为 MustInherit)类。
    WebRequest 是 .NET Framework 的用于访问 Internet 数据的请求/响应模型的抽象(在 Visual Basic 中为 MustInherit)基类。使用该请求/响应模型的应用程序可以用协议不可知的方式从 Internet 请求数据。在这种方式下,应用程序处理 WebRequest 类的实例,而协议特定的子类则执行请求的具体细节。

    请求从应用程序发送到某个特定的 URI,如服务器上的 Web 页。URI 从一个为应用程序注册的 WebRequest 子代列表中确定要创建的适当子类。注册 WebRequest 子代通常是为了处理某个特定的协议(如 HTTP 或 FTP),但是也可以注册它以处理对特定服务器或服务器上的路径的请求。

    WebClient 类:
    提供向 URI 标识的资源发送数据和从 URI 标识的资源接收数据的公共方法。不能继承此类。
    WebClient 类提供向 URI 标识的任何本地、Intranet 或 Internet 资源发送数据以及从这些资源接收数据的公共方法。

    WebClient 类使用 WebRequest 类提供对 Internet 资源的访问。WebClient 实例可以通过任何已向 WebRequest.RegisterPrefix 方法注册的 WebRequest 子代访问数据。
    详细的,查看一下msdnnull WebClient 不支持超时设定,这一点太糟糕了。因此选用HttpWebRequest代替WebClient : HttpWebRequest毕竟是WebClient 的父类,因此POST起来比较麻烦。
    try
    {
     string valpairs="";
     valpairs="c="+textBox1.Text;
     UTF8Encoding encoding=new UTF8Encoding();
     b = encoding.GetBytes(valpairs);
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost/t/default.aspx");
     request.Timeout=1000*5;
     request.Method = "POST";
     request.ContentType="application/x-www-form-urlencoded";
     request.ContentLength=b.Length;

     ……

    }

  • 相关阅读:
    HDU 6143 Killer Names【dp递推】【好题】【思维题】【阅读题】
    HDU 6143 Killer Names【dp递推】【好题】【思维题】【阅读题】
    POJ 3974 Palindrome【manacher】【模板题】【模板】
    POJ 3974 Palindrome【manacher】【模板题】【模板】
    HDU 6127 Hard challenge【计算机几何】【思维题】
    HDU 6127 Hard challenge【计算机几何】【思维题】
    HDU 6129 Just do it【杨辉三角】【思维题】【好题】
    HDU 6129 Just do it【杨辉三角】【思维题】【好题】
    HDU 3037 Saving Beans【Lucas定理】【模板题】【模板】【组合数取余】
    8.Math 对象
  • 原文地址:https://www.cnblogs.com/shikyoh/p/2036514.html
Copyright © 2011-2022 走看看