WebRequest是操作WEB请求的抽象象,它作为所有WEB请求的基类,主要由FileWebRequest、FtpWebRequest、HttpWebRequest这三个类进行实现。(选自MSDN)今天主要说一下
HttpWebRequest,从名字上看,他肯定是用来操作HTTP请求的,没错,正是如此。
标头 | 设置方 |
---|---|
Accept | 由 Accept 属性设置。 |
Connection | 由 Connection 属性和 KeepAlive 属性设置。 |
Content-Length | 由 ContentLength 属性设置。 |
Content-Type | 由 ContentType 属性设置。 |
Expect | 由 Expect 属性设置。 |
Date | 由系统设置为当前日期。 |
Host | 由系统设置为当前主机信息。 |
If-Modified-Since | 由 IfModifiedSince 属性设置。 |
Range | 由 AddRange 方法设置。 |
Referer | 由 Referer 属性设置。 |
Transfer-Encoding | 由 TransferEncoding 属性设置(SendChunked 属性必须为 true)。 |
User-Agent | 由 UserAgent 属性设置。 |
一个小例子,从网上下载图片,到本地,并进行保存。
代码如下:
Uri downUri = new Uri(@"http://img1.c2cedu.com/image/new/images/freebg.png");
//建立一个WEB请求,返回HttpWebRequest对象
HttpWebRequest hwr = (HttpWebRequest)WebRequest.Create(downUri);
//设置接收对象的范围为0-10000000字节。
hwr.AddRange(0, 10000000);
//流对象使用完后自动关闭
using (Stream stream = hwr.GetResponse().GetResponseStream())
{
//文件流,流信息读到文件流中,读完关闭
using (FileStream fs = File.Create(@"c:\gif.png"))
{
//建立字节组,并设置它的大小是多少字节
byte[] bytes = new byte[102400];
int n = 1;
while (n > 0)
{
//一次从流中读多少字节,并把值赋给N,当读完后,N为0,并退出循环
n = stream.Read(bytes, 0, 10240);
fs.Write(bytes, 0, n); //将指定字节的流信息写入文件流中
}
}
}
从上面的例子,我们可以看到HttpWebRequest操作流程是,建立链接,客户端请求,服务端响应,关闭链接四步。