You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用C#下载网页时遭遇403 Forbidden错误求助

解决C# WebClient下载SEC文件时的403 Forbidden错误

出现403 Forbidden是因为SEC的EDGAR服务器会校验请求的User-Agent请求头,默认情况下WebClient发送的请求没有携带符合要求的User-Agent,被服务器判定为非合法请求而拦截。

SEC要求User-Agent需要包含你的联系信息(比如邮箱),这样服务器能在必要时联系你,避免被识别为恶意爬虫。

修改后的代码

using (System.Net.WebClient wc = new System.Net.WebClient())
{                        
    // 设置符合SEC要求的User-Agent,替换成你的邮箱或联系信息
    wc.Headers.Add("User-Agent", "Your Name <your-email@example.com>");
    try
    {                            
        wc.DownloadFile(webURL, filePath);                                                                                                                                                                                
    }
    catch (System.Exception ex)
    {
        // 处理异常,比如打印错误信息
        Console.WriteLine($"下载失败:{ex.Message}");
    }
}

额外注意事项

  • 不要高频次批量请求SEC服务器,遵守EDGAR的使用规则,避免被临时封禁IP
  • 如果你的项目是.NET Core或.NET 5+,更推荐使用HttpClient(单例模式)来处理请求,性能和稳定性更好,示例代码如下:
using System.Net.Http;
using System.Threading.Tasks;
using System.IO;

public async Task DownloadSecFileAsync(string webURL, string filePath)
{
    // 建议将HttpClient作为单例,不要每次请求都创建
    using var httpClient = new HttpClient();
    httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("Your Name <your-email@example.com>");
    
    try
    {
        var response = await httpClient.GetAsync(webURL);
        response.EnsureSuccessStatusCode(); // 抛出HTTP错误状态码的异常
        await using var stream = await response.Content.ReadAsStreamAsync();
        await using var fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write);
        await stream.CopyToAsync(fileStream);
    }
    catch (HttpRequestException ex)
    {
        Console.WriteLine($"请求失败:{ex.Message}");
    }
}

内容的提问来源于stack exchange,提问作者DRG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 22:35:21