3

I am trying to download a file through BITS and the job is failing ( giving me a error) as i failed to mention "referer" in http header in the GET request.

        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();

Is there a way to configure the header for the GET request for the jobs ?

Thanks a ton,

Sunny

4

2 回答 2

2

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

Microsoft 的 BITS 团队现在有一个关于使用参考 DLL 从 .NET 和 C#调用 BITS以及 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! 分隔!

于 2019-01-09T01:49:15.540 回答
1

在我看来,您的 HTTP 服务器可能与 BITS 的 HTTP 要求不兼容

BITS 下载的 HTTP 要求

BITS 支持 HTTP 和 HTTPS 下载和上传,要求服务器支持 HTTP/1.1 协议。对于下载,HTTP 服务器的 Head 方法必须返回文件大小,并且它的 Get 方法必须支持 Content-Range 和 Content-Length 标头。因此,除非 ASP、ISAPI 或 CGI 脚本支持 Content-Range 和 Content-Length 标头,否则 BITS 仅传输静态文件内容并在您尝试传输动态内容时生成错误。

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

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

  • 允许 MIME 标头包含标准的 Content-Range 和 Content-Type 标头,以及最多 180 字节的其他标头。

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

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

于 2012-10-26T12:57:23.827 回答