C# ASP.NET 使用HttpWebRequest模拟下载文件到本地:示例与代码

4星 · 超过85%的资源 需积分: 42 71 下载量 181 浏览量 更新于2024-09-07 1 收藏 3KB TXT 举报
在C# ASP.NET中,当需要模拟浏览器请求下载文件到本地时,可以利用`HttpWebRequest`类来实现这一功能。以下代码片段展示了如何完成这个过程: 首先,定义一个名为`DownloadFile`的静态方法,该方法接受两个参数:`downLoadUrl`(待下载文件的URL)和`saveFullName`(目标保存路径)。方法的主体开始于创建一个`HttpWebRequest`对象,并设置其相关属性以模拟浏览器请求。 1. 使用`Create`方法创建`HttpWebRequest`对象,传入下载URL: ```csharp System.Net.HttpWebRequest httpWebRequest = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(downLoadUrl); ``` 2. 设置保持连接(KeepAlive)以提高性能,减少建立新连接的开销: ```csharp httpWebRequest.KeepAlive = true; ``` 3. 设置HTTP版本为1.1: ```csharp httpWebRequest.ProtocolVersion = HttpVersion.Version11; ``` 4. 指定请求方法为GET,这是下载文件常用的方法: ```csharp httpWebRequest.Method = "GET"; ``` 5. 设置HTTP头信息,包括通用的用户代理字符串(User-Agent),以便识别浏览器类型: ```csharp httpWebRequest.Accept = "*/*"; httpWebRequest.UserAgent = "Mozilla/5.0(Windows NT 6.1)AppleWebKit/536.5(KHTML, like Gecko)Chrome/19.0.1084.56 Safari/536.5"; httpWebRequest.Referer = downLoadUrl; ``` 6. 将`httpWebRequest`发送并获取响应: ```csharp System.Net.HttpWebResponse httpWebResponse = (System.Net.HttpWebResponse)httpWebRequest.GetResponse(); ``` 7. 接下来,检查响应状态码以确保下载成功: ```csharp // 检查状态码,例如200表示成功 if (httpWebResponse.StatusCode == HttpStatusCode.OK) { flagDown = true; } ``` 8. 如果下载成功(`flagDown`为`true`),则继续下载文件内容到本地: ```csharp using (var stream = httpWebResponse.GetResponseStream()) { using (FileStream fs = new FileStream(saveFullName, FileMode.Create)) { byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0) { fs.Write(buffer, 0, bytesRead); } } } ``` 9. 关闭响应: ```csharp httpWebResponse.Close(); ``` 10. 最后,返回下载状态: ```csharp return flagDown; ``` 这段代码通过设置合理的请求头信息,模拟浏览器行为下载文件,确保了请求的正确性和兼容性。在实际应用中,可能还需要处理异常情况以及优化请求头信息,以适应不同网站的下载策略。