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轉向的控制,還有就是缺少對Proxy 伺服器的支援。”
推薦資料:
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