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

如何在C#中从重定向URL下载CSV文件?WebClient返回HTML内容

解决WebClient下载TSMC会员区CSV时重定向返回HTML的问题

这个问题的核心原因是目标链接属于会员专属资源,服务器需要验证会话有效性。WebClient默认的重定向处理无法正确传递必要的认证Cookie或请求头,导致服务器返回登录页面HTML而非预期的CSV文件。以下是可行的解决方案:

改用HttpClient处理请求(推荐)

HttpClient对Cookie、请求头的控制更灵活,能更好地模拟浏览器请求行为:

步骤1:准备有效会话Cookie

登录members.tsetmc.com后,在浏览器开发者工具的Application > Cookies中复制认证相关的Cookie(比如ASP.NET_SessionId或其他站点专属认证Cookie)。

步骤2:编写下载代码

using System.Net;
using System.Net.Http;
using System.IO;

public async Task DownloadTargetCsvAsync()
{
    var cookieContainer = new CookieContainer();
    using var handler = new HttpClientHandler 
    { 
        CookieContainer = cookieContainer, 
        AllowAutoRedirect = true // 自动处理重定向
    };
    using var client = new HttpClient(handler);

    // 添加从浏览器获取的有效会话Cookie
    cookieContainer.Add(
        new Uri("https://members.tsetmc.com"), 
        new Cookie("ASP.NET_SessionId", "替换为你的会话ID值")
    );
    // 若有其他认证Cookie,重复上述Add方法添加

    // 模拟浏览器请求头
    client.DefaultRequestHeaders.UserAgent.ParseAdd(
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
    );
    client.DefaultRequestHeaders.Accept.ParseAdd("text/csv,application/vnd.ms-excel");

    var targetUrl = "https://members.tsetmc.com/tsev2/chart/data/Financial.aspx?i=57086055330734195&t=ph&a=1";
    var response = await client.GetAsync(targetUrl);

    // 确保请求成功
    response.EnsureSuccessStatusCode();

    // 保存CSV到指定路径
    var csvContent = await response.Content.ReadAsByteArrayAsync();
    File.WriteAllBytes(@"C:\你的指定路径\financial_data.csv", csvContent);
}

若必须使用WebClient的兼容方案

如果坚持使用WebClient,需要手动注入Cookie和请求头:

using System.Net;

public void DownloadWithWebClient()
{
    using var client = new WebClient();
    // 添加Cookie
    client.Headers.Add(HttpRequestHeader.Cookie, "ASP.NET_SessionId=你的会话ID值; 其他认证Cookie=对应值");
    // 添加请求头
    client.Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36");
    client.Headers.Add(HttpRequestHeader.Accept, "text/csv,application/vnd.ms-excel");

    var targetUrl = "https://members.tsetmc.com/tsev2/chart/data/Financial.aspx?i=57086055330734195&t=ph&a=1";
    client.DownloadFile(targetUrl, @"C:\你的指定路径\financial_data.csv");
}

关键注意事项

  • Cookie必须是当前有效的会话值,过期后需要重新从浏览器获取。
  • 若未登录,需先模拟登录:向站点的登录接口发送POST请求,传递用户名密码,获取会话Cookie后再执行下载操作。
  • 服务器可能会验证请求头的合法性,务必模拟真实浏览器的请求头信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 02:15:55