我正试图通过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团队现在有一个关于使用引用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。
有关更多信息,请查看此链接