WebRequest, WebResponse , HttpWebResponse, HttpWebResponse , WebClient笔记

1.WebRequest, WebResponse  与 HttpWebRequest, HttpWebResponse

WebRequest是一个抽象类, HttpWebRequest和FtpWebRequest都是它的子类。

WebResponse也是一个抽象类, HttpWebResponse和FtpWebResponse都是它的子类。

2.WebRequest, WebResponse 例子

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;

namespace WindowsFormsAppWebRequest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Uri uri = new Uri(this.textBox2.Text);

            WebRequest req = WebRequest.Create(uri);

            //req.Headers.Add("User-Agent", "ie9");

            WebResponse respose = req.GetResponse();
           
            Stream ReceiveStream = respose.GetResponseStream();

            StreamReader sr = new StreamReader(ReceiveStream);

            string resultstring = sr.ReadToEnd();

            this.textBox1.Text = resultstring;
        }
    }
}

3.HttpWebRequest, HttpWebResponse 完成同样功能例子

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;

namespace WindowsFormsAppWebRequest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Uri uri = new Uri(this.textBox2.Text);

            HttpWebRequest req = HttpWebRequest.Create(uri) as HttpWebRequest;

            req.Headers.Add("User-Agent", "ie9");

            HttpWebResponse respose = req.GetResponse() as HttpWebResponse;
           
            Stream ReceiveStream = respose.GetResponseStream();

            StreamReader sr = new StreamReader(ReceiveStream);

            string resultstring = sr.ReadToEnd();

            this.textBox1.Text = resultstring;
        }
    }
}

4.那到底WebRequest与HttpWebRequest有何区别呢?

就在于http的特别之处,比如

req.Headers.Add("User-Agent", "ie9");

可以在HttpWebRequest中使用,但在WebRequest中不可以。

5.FtpWebRequest和FtpWebResponse的例子以后再补,不过原理是一样的。

6. WebClient的例子

WebClient client = new WebClient();
client.BaseAddress = textBox2.Text;
Stream obj = client.OpenRead("/");
StreamReader read=new StreamReader(obj);
this.textBox1.Text = read.ReadToEnd();

7. WebClient与HttpWebRequest的比较

WebRequest, HttpWebRequest能完成的工作WebClient也都能做,那他们有何区别?看一下源代码即可知道,WebClient里面实际是调用了WebRequest的方法完成的相应功能。

按照titi的话说“.Net框架中已经为我们提供了WebRequest和WebResponse两个强大的类来处理向URI标示的资源和获取数据了。然后,不足的是利用WebRequest和WebResponse时设置过于复杂。
使用起来颇为费劲。于是乎有了现在的WebClient,WebClient其实可以理解为对WebRequest和WebResponse等协作的封装。它使人们使用起来更加简单方便,然后它也有先天不足的地方。

那就是缺少对cookies/session的支持,用户无法对是否自动url转向的控制,还有就是缺少对代理服务器的支持。”

推荐资料: 

Determining Whether the Device Is Connected
http://www.cnblogs.com/tuyile006/archive/2008/11/14/1333632.html

WebClient的研究笔记(一)--认识WebClien

thttp://www.cnblogs.com/titi/archive/2005/11/20/280914.html

原文地址:https://www.cnblogs.com/liuzhendong/p/2520272.html