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

使用C# (.NET Framework 4.7.2)无法从指定URL下载文件

解决.NET Framework 4.7.2下载文件时“基础连接已关闭”的问题

问题概述

使用.NET Framework 4.7.2编写控制台程序,尝试下载指定HLS manifest文件时,出现错误:Die zugrunde liegende Verbindung wurde geschlossen: Unerwarteter Fehler beim Senden..(英文翻译:The underlying connection has been closed: Unexpected error while sending..)。该文件可在Firefox中正常下载,但HttpClient和WebClient两种实现方式均失败。

解决方案

目标服务器(Boltdns/Fastly)对请求头、TLS协议支持有严格校验,以下是修正后的代码:

1. HttpClient 修正代码

ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
// .NET Framework 4.7+推荐使用SystemDefault,让系统自动适配TLS版本,同时显式兼容TLS1.2/1.3
ServicePointManager.SecurityProtocol = SecurityProtocolType.SystemDefault | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls13;
// 启用100-continue握手,适配CDN服务器要求
ServicePointManager.Expect100Continue = true;

using (var client = new HttpClient())
{
    // 添加Firefox浏览器的User-Agent,避免被服务器拦截
    client.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/113.0");
    var response = client.GetByteArrayAsync("https://manifest.prod.boltdns.net/manifest/v1/hls/v4/aes128/1324209225001/41f5d925-9942-471c-8916-da9d45a92898/10s/master.m3u8?fastly_token=NjQ1ZDYwMGVfNWNhOTM0ODNkZjlmNzM5NWJjYTU5MDA4Mzg0MTlmNzFkYWNmODIxNmQwNzQ3ZjMxNDU0MTJjYTA3YmI4YzM5MQ%3D%3D").Result;
    File.WriteAllBytes("myfile.m3u8", response);
}

2. WebClient 修正代码

ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
ServicePointManager.SecurityProtocol = SecurityProtocolType.SystemDefault | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls13;
ServicePointManager.Expect100Continue = true;

using (var wc = new WebClient())
{
    wc.Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/113.0");
    var bytes = wc.DownloadData("https://manifest.prod.boltdns.net/manifest/v1/hls/v4/aes128/1324209225001/41f5d925-9942-471c-8916-da9d45a92898/10s/master.m3u8?fastly_token=NjQ1ZDYwMGVfNWNhOTM0ODNkZjlmNzM5NWJjYTU5MDA4Mzg0MTlmNzFkYWNmODIxNmQwNzQ3ZjMxNDU0MTJjYTA3YmI4YzM5MQ%3D%3D");
    File.WriteAllBytes("myfile.m3u8", bytes);
}

关键调整说明

  • TLS协议设置:使用SecurityProtocolType.SystemDefault让系统自动匹配服务器支持的TLS版本,同时显式指定Tls12和Tls13,避免旧协议被拒绝。
  • User-Agent头:模拟浏览器请求标识,部分CDN会拦截无标识或默认.NET标识的请求。
  • Expect100Continue:启用该设置适配部分CDN的握手校验要求,解决连接中断问题。

注:目标URL有效期至2023年5月13日,过期后token失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 14:45:47