C#下载文件httpWebRequest
在 C# 中使用 HttpWebRequest
下载文件是处理 HTTP 请求的一个常见操作。HttpWebRequest
类提供了对 HTTP 请求和响应的详细控制。以下是如何使用 HttpWebRequest
下载文件的详细步骤和示例代码。
1. 设置 HttpWebRequest
HttpWebRequest
类允许你配置 HTTP 请求的各种属性,包括 URL、请求方法、请求头等。
1.1 创建和配置请求
csharpusing 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. 异常处理
处理可能发生的异常是确保应用程序稳定性的关键。常见的异常包括网络错误、文件写入错误等。
csharpcatch (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
,你可以结合 Task
和 async/await
实现异步下载。
示例代码(异步):
csharpusing 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);
}
}
}
}
总结
- 设置
HttpWebRequest
: 创建HttpWebRequest
实例,设置请求方法为GET
,并配置其他属性。 - 处理 HTTP 响应: 检查响应状态码,并读取响应流保存文件。
- 异常处理: 捕获并处理网络错误和文件操作错误。
- 异步下载: 使用
async/await
和Task
实现异步下载,提升性能和响应性。
关键字
C#, HttpWebRequest
, 下载文件, HTTP 请求, 响应流, 文件保存, 异常处理, 异步下载, HttpClient
, async/await