ASP.NET获取远程网页下载到本地文件

通过ASP.NET生成静态文件的文章网上有好多文章,而本站也有不少的相关文章教程,通常ASP.NET生成静态文件的做法是使用文件流读取模板内容,之后替换模板内容中相关关键字,再生成静态文件。本文的做法另类一点,通过URL来生成静态文件,下面来看下是如何实现吧。

创建一个TestWeb.aspx文件,这个文件后台.cs的代码做法步骤如下:

第1步:先引用如下命令空间

1 using System;  
2 using System.Net;  
3 using System.IO;  
4 using System.Text; 

第2步:创建获取远程URL并生成文件的方法与文件夹不存在则自动建立方法

获取远程URL并生成文件的代码:

 1 /// <summary>   
 2     /// 生成网页文件   
 3     /// </summary>   
 4     /// <param name="url">远程URL</param>   
 5     /// <param name="filename">生成文件名路径</param>   
 6     /// <param name="pagecode">目标URL页面编码</param>    
 7     protected void DownUrltoFile(string url, string filename, string pagecode)  
 8     {  
 9   
10         try  
11         { //编码 Encoding encode = Encoding.GetEncoding(pagecode); //请求URL   
12             HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); //设置超时(10秒)   
13             req.Timeout = 10000;  
14   
15             this.NotFolderIsCreate(filename); //获取Response   
16             HttpWebResponse rep = (HttpWebResponse)req.GetResponse(); //创建StreamReader与StreamWriter文件流对象   
17   
18             StreamReader sr = new StreamReader(rep.GetResponseStream(), System.Text.Encoding.Default);  
19             StreamWriter sw = new StreamWriter(Server.MapPath(filename), false, System.Text.Encoding.Default); //写入内容   
20             sw.Write(sr.ReadToEnd()); //清理当前缓存区,并将缓存写入文件 sw.Flush();   
21             //释放相关对象资源   
22   
23             sw.Close();  
24             sw.Dispose();  
25             sr.Close();  
26             sr.Dispose();  
27             Response.Write("生成文件" + filename + "成功");  
28         }  
29         catch (Exception ex) { Response.Write("生成文件" + filename + "失败,原因:" + ex.Message); }  
30     } 

以上代码关键知识点,通过HttpWebRequest、HttpWebResponse请求获取远程URL数据,之后使用StreamReader、StreamWriter文件流读写数据写入文件,注意还有编码Encoding。

文件夹不存在则自动建立的代码:

1 /// <summary>   
2 /// 文件夹不存在则创建   
3 /// </summary>   
4 /// <param name="filename">文件名所在路径</param>    
5 protected void NotFolderIsCreate(string filename)  
6 {  
7     string fileAtDir = Server.MapPath(Path.GetDirectoryName(filename));  
8     if (!Directory.Exists(fileAtDir)) Directory.CreateDirectory(fileAtDir);  
9 }  

下面我们看下如何调用生成文件。

在Page_Load中调用DownUrltoFile()方法,以获取百度首页生成静态文件

1 protected void Page_Load(object sender, EventArgs e)  
2     {  
3         //调用方法    
4         this.DownUrltoFile("http://www.baidu.com", "html/baidu.htm", "GB2312");  
5     }