我正在尝试通过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请求配置标题?
非常感谢,
阳光
答案 0 :(得分:1)
听起来我的HTTP服务器可能与BITS的HTTP要求不兼容
BITS下载的HTTP要求
BITS支持HTTP和HTTPS下载和上传,并且需要这样做 服务器支持HTTP / 1.1协议。对于下载,HTTP server的Head方法必须返回文件大小,其Get方法必须 支持Content-Range和Content-Length标头。结果是, BITS仅传输静态文件内容,如果您生成错误 尝试传输动态内容,除非ASP,ISAPI或CGI脚本 支持Content-Range和Content-Length标头。
BITS可以使用 HTTP / 1.0服务器,只要它符合Head和Get方法 要求。
要支持下载文件范围,服务器必须 支持以下要求:
允许MIME标头包含标准的Content-Range和Content-Type标头,以及最多180个字节的其他标头。
在HTTPheaders和第一个边界字符串之间最多允许两个CR / LF。
有关详细信息,请查看this link
答案 1 :(得分:1)
BITS使您可以在请求上设置自定义标头。
Microsoft的BITS团队现在在Calling into BITS from .NET and C# using reference DLLs上有一个页面,在GitHub上有完整的示例调用BITS Manager。
我刚刚尝试了对该示例的自定义修改。在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-other-header:another header \ r \ n”)。请注意,HTTP标头必须用\ r \ n分隔!