C#下载文件httpWebRequest

在 C# 中使用 HttpWebRequest 下载文件是处理 HTTP 请求的一个常见操作。HttpWebRequest 类提供了对 HTTP 请求和响应的详细控制。以下是如何使用 HttpWebRequest 下载文件的详细步骤和示例代码。

1. 设置 HttpWebRequest

HttpWebRequest 类允许你配置 HTTP 请求的各种属性,包括 URL、请求方法、请求头等。

1.1 创建和配置请求

csharp
using System; using System.IO; using System.Net; class Program { static void Main() { // 下载文件的 URL string fileUrl = "https://example.com/file.zip"; // 本地保存路径 string savePath = "file.zip"; // 创建 HttpWebRequest 实例 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(fileUrl); request.Method = "GET"; // 设置请求方法为 GET request.Timeout = 10000; // 请求超时设置(例如10秒) try { // 获取响应 using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { // 确保响应状态为200 OK if (response.StatusCode == HttpStatusCode.OK) { // 读取响应流并保存文件 using (Stream responseStream = response.GetResponseStream()) using (FileStream fileStream = new FileStream(savePath, FileMode.Create, FileAccess.Write)) { responseStream.CopyTo(fileStream); } Console.WriteLine("File downloaded successfully."); } else { Console.WriteLine("Error: " + response.StatusCode); } } } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); } } }

2. 处理 HTTP 响应

2.1 检查响应状态

在下载文件之前,检查 HTTP 响应的状态码,以确保请求成功。例如,状态码 HttpStatusCode.OK(200)表示请求成功。

2.2 处理响应流

响应流(response.GetResponseStream())是你从服务器接收到的数据流。你可以将其复制到本地文件流中以保存文件。

3. 异常处理

处理可能发生的异常是确保应用程序稳定性的关键。常见的异常包括网络错误、文件写入错误等。

csharp
catch (WebException webEx) { Console.WriteLine("WebException: " + webEx.Message); } catch (IOException ioEx) { Console.WriteLine("IOException: " + ioEx.Message); } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); }

4. 异步下载(可选)

如果你需要进行异步操作,可以使用 HttpClient 类(推荐用于异步下载),但如果你仍希望使用 HttpWebRequest,你可以结合 Taskasync/await 实现异步下载。

示例代码(异步):

csharp
using System; using System.IO; using System.Net; using System.Threading.Tasks; class Program { static async Task Main() { string fileUrl = "https://example.com/file.zip"; string savePath = "file.zip"; try { await DownloadFileAsync(fileUrl, savePath); Console.WriteLine("File downloaded successfully."); } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); } } static async Task DownloadFileAsync(string fileUrl, string savePath) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(fileUrl); request.Method = "GET"; using (HttpWebResponse response = (HttpWebResponse)await Task.Factory.FromAsync(request.BeginGetResponse, request.EndGetResponse, null)) { if (response.StatusCode == HttpStatusCode.OK) { using (Stream responseStream = response.GetResponseStream()) using (FileStream fileStream = new FileStream(savePath, FileMode.Create, FileAccess.Write)) { await responseStream.CopyToAsync(fileStream); } } else { throw new Exception("Error: " + response.StatusCode); } } } }

总结

  1. 设置 HttpWebRequest: 创建 HttpWebRequest 实例,设置请求方法为 GET,并配置其他属性。
  2. 处理 HTTP 响应: 检查响应状态码,并读取响应流保存文件。
  3. 异常处理: 捕获并处理网络错误和文件操作错误。
  4. 异步下载: 使用 async/awaitTask 实现异步下载,提升性能和响应性。

关键字

C#, HttpWebRequest, 下载文件, HTTP 请求, 响应流, 文件保存, 异常处理, 异步下载, HttpClient, async/await