在C#中的BITS(Microsoft后台智能传输服务)中配置请求标头



我正试图通过BITS下载一个文件,但作业失败了(给我一个错误),因为我在GET请求的http标头中没有提到"referer"。

        BitsManager manager = new BitsManager();           
        manager.EnumJobs(JobOwner.CurrentUser);
        BitsJob newJob = manager.CreateJob(j.filename, JobType.Download);
        j.jobID = newJob.JobId;
        newJob.AddFile(j.serverLink, "C:\Downloads\" + j.filename);
        newJob.Priority = JobPriority.ForeGround;
        newJob.MinimumRetryDelay = 60;
        manager.OnJobTransferred += new EventHandler<NotificationEventArgs>(manager_OnJobTransferred);
        manager.OnJobModified += new EventHandler<NotificationEventArgs>(manager_OnJobModified);
        newJob.Resume();

有没有办法为作业的GET请求配置头

谢谢你,

阳光

BITS允许您在请求上设置自定义标头。

微软的BITS团队现在有一个关于使用引用DLL从.NET和C#调用BITS的页面,以及GitHub上的完整示例调用BITS管理器。

我刚刚尝试过对样品进行自定义修改。在setJobPropertyControl.xaml.cs中,我将作业强制转换为IBackgroundCopyJobHttpOptions,如下所示:

var jobHttpOptions = job as BITS4.IBackgroundCopyJobHttpOptions;

我还得做

using BITS4 = BITSReference4_0;

然后我可以

jobHttpOptions.SetCustomHeaders (text); 

其中text是需要设置的页眉。您可以通过连接一个大字符串("referer:http://www.example.com\\r\nx其他标头:另一个标头\r\n")。请注意,HTTP标头必须用\r\n!

分隔

听起来你的HTTP服务器可能与BITS 的HTTP要求不兼容

BITS下载的HTTP要求

BITS支持HTTP和HTTPS下载和上载,并要求服务器支持HTTP/1.1协议。对于下载,HTTP服务器的Head方法必须返回文件大小,其Get方法必须支持Content Range和Content Length标头。因此BITS仅传输静态文件内容,如果尝试传输动态内容,除非ASP、ISAPI或CGI脚本支持"内容范围"one_answers"内容长度"标头。

BITS可以使用HTTP/1.0服务器,只要它满足Head和Get方法要求。

要支持文件的下载范围,服务器必须支持以下要求:

  • 允许MIME标头包括标准的"内容范围"one_answers"内容类型"标头,以及最多180字节的其他标头。

  • HTTPHeader和第一个边界字符串之间最多允许两个CR/LF。

有关更多信息,请查看此链接

最新更新