WebRequest、WebResponse的使用示例

1.WebRequest和WebResponse

   首先新建windows窗体应用程序,添加列表框,并将其docking属性设置为“DockStyle.Fill”,然后对主窗体的构造函数进行如下改动。

public Form1()
{
    InitializeComponent();
    WebRequest request = WebRequest.Create("http://www.baidu.com");
    WebResponse response = request.GetResponse();
    Stream strm = response.GetResponseStream();
    StreamReader sr = new StreamReader(strm);
    string line;
    while ((line = sr.ReadLine()) != null)
        listBox1.Items.Add(line);
    strm.Close();          
}

  WebRequest发送请求,WebResponse接受从服务器返回的数据。初始化WebRequest时调用静态函数Create(),并将地址作为参数。 通过函数GetResponse获取服务器对请求的响应。通过函数GetResponseStream()获取服务器返回的数据流。

运行结果

 

2. HttpWebRequest和HttpWebResponse

    HttpWebRequest 和 HttpWebResponse分别是WebRequest、WebResponse的派生类,用以处理HTTP URL创建的请求及响应。这两个类可以访问HTTP协议的特定属性。

public Form1()
{
    InitializeComponent();
    WebRequest request = WebRequest.Create("http://www.baidu.com");
    HttpWebRequest httpRequest = (HttpWebRequest)request;
    listBox1.Items.Add("Tiemout = " + httpRequest.Timeout);
    listBox1.Items.Add("Keep Alive = " + httpRequest.KeepAlive);
    listBox1.Items.Add("AllowAutoRedirect = " + httpRequest.AllowAutoRedirect);
}

    Timeout属性表示超时时间(默认为100000ms),属性KeepAlive表示是否保持连接(默认为True),属性AllowAutoRedirect表示请求是否跟随Web服务器的重定向响应(默认为True)。

运行结果

  

 

    请求类和响应类以属性的形式提供了很多重要的信息,也可以通过Header提取信息。

public Form1()
{
    InitializeComponent();
    WebRequest request = WebRequest.Create("http://www.baidu.com");
    HttpWebRequest httpRequest = (HttpWebRequest)request;
    WebResponse response = request.GetResponse();
    WebHeaderCollection webHeader = response.Headers;
    for (int i = 0; i < webHeader.Count; i++)
    {
        listBox1.Items.Add(string.Format("Header {0}:: {1}", webHeader.GetKey(i), webHeader[i]));
    }
}

 运行结果

 

3.异步请求

    向服务器发送请求到接收到服务器响应之间会有延迟,如果不希望程序处于等待状态,就应该使用异步方法。     

   函数BeginGetResponse()异步工作,并立即返回。在底层,运行库会异步管理一个后台线程,以从服务器上接收响应。

    回调函数OnResponse的返回类型是void,参数是IAsyncResult。当后台线程收到响应后,就执行该回调函数。回调函数中可以使用EndGetResponse获取WebResponse对象。

public partial class Form1 : Form
{
    protected static void OnResponse(IAsyncResult ar)
    {
        WebRequest request = (WebRequest)ar.AsyncState;
        WebResponse response = request.EndGetResponse(ar);
        // read response
    }

    public Form1()
    {
        InitializeComponent();
        WebRequest request = WebRequest.Create("http://www.baidu.com");
        request.BeginGetResponse(new AsyncCallback(OnResponse),request);
    }
}

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值