zoukankan      html  css  js  c++  java
  • 网络编程之webclient和httpwebrequest的使用

    (1)Lambda表达式

    Lambda 表达式”是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或表达式树类型。

    所有 Lambda 表达式都使用 Lambda 运算符 =>,该运算符读为“goes to”。 该 Lambda 运算符的左边是输入参数(如果有),右边包含表达式或语句块。 Lambda 表达式 x => x * x 读作“x goes to x times x”。可以将此表达式分配给委托类型,如下所示:

    delegate int del(int i); static void Main(string[] args) {     del myDelegate = x => x * x;     int j = myDelegate(5); //j = 25 } 

    创建表达式树类型:

    using System.Linq.Expressions;  namespace ConsoleApplication1 {     class Program     {         static void Main(string[] args)         {             Expression<del> myET = x => x * x;         }     } } 

    => 运算符具有与赋值运算符 (=) 相同的优先级,并且是右结合运算符。


    (2)System.Net.WebClient 类

    提供向 URI 标识的资源发送数据和从 URI 标识的资源接收数据的公共方法。

    WebClient 类提供向 URI(支持以 http:、https:、ftp:、和 file: 方案标识符开头的 URI) 标识的任何本地、Intranet 或 Internet 资源发送数据以及从这些资源接收数据的公共方法。

    WebClient 类使用 WebRequest 类提供对资源的访问。WebClient 实例可以通过任何已向 WebRequest.RegisterPrefix 方法注册的 WebRequest 子代访问数据。


    (3)System.Net.HttpWebRequest 

    提供 WebRequest 类的 HTTP 特定的实现。

    HttpWebRequest 对 HTTP 协议进行了完整的封装,程序使用 HTTP 协议和服务器交互主要是进行数据的提交,通常数据的提交是通过 GET 和 POST 两种方式来完成。

        HttpWebRequest 常用命令如下:

      HttpWebRequest - 对指定的 URI 发出请求
      Create() - 初始化一个 WebRequest
      BeginGetResponse() - 开始对指定 URI 资源做异步请求
      EndGetResponse() - 结束对指定 URI 资源做异步请求
      HttpWebResponse - 对指定的 URI 做出响应
      GetResponseStream() - 获取响应的数据流   需要注意的是: HttpWebRequest使用基于代理的异步编程模型,在HTTP响应返回时引发的HttpWebRequest回调不是在UI线程上返回的,因此在该回调中需要额外代码处理UI,否则就会产生"跨线程访问无效"错误。

    (4)回调方法的签名和工作机制
          1.回调方法必须要符合以下签名:
    <
    修饰符>void <方法名>(IAsynResult asynResult);回调的方法的名称的统一规范是在名称前面加On ,如:OnAsynCallBack();(注:命名事件和委托等类型时候同样有类似的惯例)
       2.
    工作机制:
    .Net
    使用从线程池中得到的线程来执行通过BeginInvoke()分配的方法,当异步方法执行完成时,工作线程调用回调方法而不只直接回到线程池中,要实现回调方法,我们必须在使用beginInvoke()方法的时候指定一个参数为IAsyncResult类型的方法,因为在 AsyncResult是一个.Net中已经定义好的委托,我们要使用回调方法的话,就必须符合他的要求:他的定义如下,public delegate void AsyncCallBack(IAsyncResult asyncResult);
    (5)实例
                    // Create a HttpWebrequest object to the desired URL.
                    HttpWebRequest myHttpWebRequest1= (HttpWebRequest)WebRequest.Create(uri);
                    // Create an instance of the RequestState and assign the previous myHttpWebRequest1
                    // object to it's request field.  
                    RequestState myRequestState = new RequestState();  //压根找不到这个类
                    myRequestState.request = myHttpWebRequest1;
                    // Start the asynchronous request.
                    IAsyncResult result=
                      (IAsyncResult) myHttpWebRequest1.BeginGetResponse(new AsyncCallback(RespCallback),myRequestState);
                    // Release the HttpWebResponse resource.
                    myRequestState.response.Close();
                  }
    (6)WebClient
    private void DoWebClient()
    {
    WebClient webClient
    = new WebClient();
    //在不阻止调用线程的情况下,从资源返回数据 
    webClient.OpenReadAsync(
    new Uri("http://www.cnblogs.com/linzheng"));
    //异步操作完成时发生 
    webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted);
    }

    void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
    {
    using (StreamReader reader = new StreamReader(e.Result))
    {
    string contents = reader.ReadToEnd();
    。。。。。。

    (7)HttpWebRequest
    private void DoHttpWebRequest()
    {
    string url = "http://www.cnblogs.com/linzheng";
    WebRequest request
    = HttpWebRequest.Create(url);//创建WebRequest类
    IAsyncResult result = (IAsyncResult)request.BeginGetResponse(ResponseCallback, request);//返回异步操作的状态
    }

    private void ResponseCallback(IAsyncResult result)
    {
    HttpWebRequest request
    = (HttpWebRequest)result.AsyncState;//获取异步操作返回的的信息
    WebResponse response = request.EndGetResponse(result);//结束对 Internet 资源的异步请求

    using (Stream stream = response.GetResponseStream())
    using (StreamReader reader = new StreamReader(stream))
    {
    string contents = reader.ReadToEnd();
    ......
    Dispatcher.BeginInvoke(() => 
    httpWebRequestTextBlock.Text = contents.ToString().Substring(begin + 7, end - begin - 7); 
    textBox2.Text = note; 
    });
    }
     完美世界 http://www.23cat.com/Contents_51864.html 
      戮仙 http://www.23cat.com/Book_51960.html  
  • 相关阅读:
    C#的几种下载文件方法
    分享下常用的网站
    C#操作XML文件
    MySQL截取字符串函数方法
    NLog使用方法
    弹出div提示框,背景变黑
    有关URL编码问题
    javascript 压缩工具
    [C#][Windows API] 常用Windows原生方法整理(Windows API) (不定期更新: 06/16)【转】
    An Introduction to IDS
  • 原文地址:https://www.cnblogs.com/cxd4321/p/3960538.html
Copyright © 2011-2022 走看看