HTTP 范围:使用 WebClient C# 的字节

2024-01-15

我正在尝试恢复文件下载。

我使用下面的代码成功下载了我需要的文件。

    downlaodfile = new WebClient();
  // downlaodfile.Headers.Add("Range", "bytes=0-600000");
downlaodfile.DownloadFileAsync(new Uri(video.DownloadUrl), @"C:\Videofile.pm4");

当我取消注释下面的行时,问题就开始了,我下载了 0 个字节

 downlaodfile.Headers.Add("Range", "bytes=0-600000");

恢复 WebClient 类的正确方法是什么?


您的代码不起作用,因为您无法按照尝试设置的方式设置 Range 标头。要验证,只需订阅DownloadFileCompleted事件并转储错误:

downlaodfile.DownloadFileCompleted += (sender, e) =>
{
    Console.WriteLine(e.Error);
};

你会得到这样的打印结果:

System.Net.WebException: An exception occurred during a WebClient request. ---> System.ArgumentException: The 'Range' header must be modified using the appropriate property or method.
Parameter name: name
   at System.Net.WebHeaderCollection.ThrowOnRestrictedHeader(String headerName)
   at System.Net.WebHeaderCollection.Add(String name, String value)
   at System.Net.HttpWebRequest.set_Headers(WebHeaderCollection value)
   at System.Net.WebClient.CopyHeadersTo(WebRequest request)
   at System.Net.WebClient.GetWebRequest(Uri address)
   at System.Net.WebClient.DownloadFileAsync(Uri address, String fileName, Object userToken)
   --- End of inner exception stack trace ---

好的,所以您可能需要一个自定义 WebClient:

public class WebClientEx : WebClient
{
    private readonly long from;
    private readonly long to;

    public WebClientEx(long from, long to)
    {
        this.from = from;
        this.to = to;
    }

    protected override WebRequest GetWebRequest(Uri address)
    {
        var request = (HttpWebRequest)base.GetWebRequest(address);
        request.AddRange(this.from, this.to);
        return request;
    }
}

你可以这样使用:

downlaodfile = new WebClientEx(0, 600000);
downlaodfile.DownloadFileAsync(new Uri(video.DownloadUrl), @"C:\Videofile.pm4");

或者简单地使用HttpWebRequest类而不是WebClient:

var request = (HttpWebRequest)WebRequest.Create(video.DownloadUrl);
request.AddRange(0, 600000);
using (var response = await request.GetResponseAsync())
using (var stream = response.GetResponseStream())
using (var output = File.Create(@"C:\Videofile.pm4"))
{
    await stream.CopyToAsync(output);
}

或者如果您喜欢HttpClient:

var client = new HttpClient();
client.DefaultRequestHeaders.Range = new RangeHeaderValue(0, 600000);
using (var stream = await client.GetStreamAsync(video.DownloadUrl))
using (var output = File.Create(@"C:\Videofile.pm4"))
{
    await stream.CopyToAsync(output);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTTP 范围:使用 WebClient C# 的字节 的相关文章

随机推荐

  • 返回导出模块的最佳方法

    在我的学习之旅中 我开始研究 javaScript Node 的模块 让我困惑的是 当模块内完成功能的时间未知时 如何从模块返回信息 这将按预期返回 控制器 js const myModule require myModule var my
  • React中如何通过Key查找元素?

    ul li 1234 li li 5678 li li 9 li ul 如何通过Key查找元素并更改元素值 如addClass innerHtml 注意 在 Plain React 中 没有 Flux 或 Jsx 进入key已在 React
  • 为什么 groupby 和rolling 不能一起工作?

    我有一个从 coinmarketcap 中抓取的 df 我正在尝试计算 close price 列的波动率指标 但是当我使用 groupby 时 我收到一条错误消息 final coin data vol final coin data g
  • Doctrine2:[语义错误]如果不选择至少一个根实体别名,则无法通过标识变量选择实体

    这是我使用查询生成器进行的查询 它运行得很好 带来了用户表和模块表的所有结果 其中具有多对多关联 public function getUser id qb this gt getEm gt createQueryBuilder gt se
  • 具有引用完整性的 NoSQL/RDBMS 混合(删除级联)?

    是否有一种数据库可以为您带来引用完整性的优势并能够使用 SQL 类型语言进行查询 同时还可以松散地定义实体的数据属性以及它们之间的关系 例如 采用 RBAC 类型模型 其中有权限 用户 用户组和角色 复杂 灵活的模型可能具有以下规则 角色可
  • Python:如何创建一个要求准确字数的函数?

    这是我到目前为止所拥有的 import string 所以我让用户写一个 5 个单词的句子 只要求 5 个单词 def main sentence raw input Enter a 5 worded sentence if len wor
  • IIS 7.5 没有图像 css js 显示

    我有 2 台 Windows 2008 R2 x64 服务器 NLB ARR 具有共享配置 我的应用程序文件位于网络共享中 ASP net 页面 aspx 运行良好 但 css 图像 js 不起作用 我还有一个 htm 文件 可以很好地显示
  • 反编译Obj C框架

    我想反编译iOS Twitter 框架 如果事实上我从xcode 的模拟器中获取twitterd 文件 该文件已预编译为在x86 而不是ARM 上运行 至于我使用的工具http code google com p i386codedump
  • 需要快速读取 Android 传感器

    Issue 我正在开发一个应用程序 每 5 需要一个新的加速度数据 毫秒 我的方法 我创建了一个远程服务 只读取加速度 来自 SensorManager 的数据 我还将读取速率设置为 初始化时 延迟最快 传感器管理器 然后我也使用IPC进行
  • 如何在 Windows 7 64 位上安装 GitHub 时修复此错误

    http picsmashup com images jnasdh JPG http picsmashup com images jnasdh JPG 组件 Microsoft NET Framework 4 x86 和 x64 安装失败
  • Wix Burn 捆绑包 - 必须是管理员

    我创建了一个 WIX 刻录包 在捆绑包中 我安装了 Net 4 如果未安装 然后再安装 2 个 msi 文件 1 是第三部分 msi 另一个是我使用 WIX 为我的软件创建的 msi 我需要成为计算机上的管理员才能运行这些 msi 文件 如
  • OpenCV 中组合仿射变换的内置函数?

    Opencv中有没有结合仿射变换的内置函数 我也可以自己编写它 但如果可能的话我会坚持使用库函数 Cheers 现在我这样做 我分配 a1 a2 r 矩阵 所有 3x3 眼睛 我用变换矩阵 a1aff a2aff 替换前两个矩阵的顶部部分
  • parseInt 与 unary plus,何时使用哪个?

    这条线有什么区别 var a parseInt 1 10 a 1 和这条线 var a 1 a 1 This jsperf测试 http jsperf com parseint vs unary operator表明一元运算符在当前的 ch
  • 追加到Python字典中的列表[重复]

    这个问题在这里已经有答案了 有没有更优雅的方式来编写这段代码 我在做什么 我有钥匙和日期 可以有多个日期分配给一个键 因此我正在创建一个日期列表字典来表示它 下面的代码工作正常 但我希望有一个更优雅和 Pythonic 的方法 dates
  • 如何使用 setLocalNightMode() 在每个活动中启用 MODE_NIGHT_YES?

    我最近想创建一个设置 在我的 Android 应用程序中启用夜间模式 我在互联网上搜索并找到了一个很好的解决方案 其中包含 AppCompatDelegate 的 DayNight 主题和一个简短的代码片段 if settingsShare
  • 如何在 C++ 中使用 cin 隐藏用户输入? [复制]

    这个问题在这里已经有答案了 可能的重复 从 std cin 读取密码 https stackoverflow com questions 1413445 read a password from stdcin 我正在尝试制作一个简单的密码程
  • 在 Azure AD B2C 中,ACR 或 TFP 声明是否应该具有策略名称?

    根据这个文档 https learn microsoft com en us azure active directory b2c active directory b2c reference tokens the Policy Name应
  • FluentNHibernate - 自动映射忽略属性

    我有一个基类 其中包含一个名为 IsDirty 的属性 它用于域模型 不是数据库表中的列 当使用自动映射时 Fluent nhibernate 尝试将此列添加到表中 解决这个问题的一种方法是把 ForTypesThatDeriveFrom
  • Flutter:如何更新单个列表项的 ValueNotifier

    我有一个列表生成器 用于创建包含内容的卡片 在这张卡中 我有一个按钮和文本小部件 基本上 我想在按下按钮时更新文本小部件 我尝试使用 ValueNotifier 并且它有效 但它会更新每个列表项的值 这是主要功能 我创建了 ValueNot
  • HTTP 范围:使用 WebClient C# 的字节

    我正在尝试恢复文件下载 我使用下面的代码成功下载了我需要的文件 downlaodfile new WebClient downlaodfile Headers Add Range bytes 0 600000 downlaodfile Do