Настройка заголовков запросов в BITS (Microsoft Background Intelligent Transfer Service) в C#

Я пытаюсь загрузить файл через BITS, и работа не выполняется (из-за ошибки), поскольку я не смог упомянуть "referer" в заголовке http в запросе GET.

        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 для заданий?

Благодаря тонну,

Солнечно

1 ответ

BITS позволяет вам устанавливать пользовательские заголовки по запросу.

У команды BITS в Microsoft теперь есть страница, посвященная вызовам в BITS из.NET и C# с использованием эталонных DLL, а также полный пример вызова BITS Manager на GitHub.

Я только что попробовал пользовательскую модификацию образца. В setJobPropertyControl.xaml.cs я привел задание к IBackgroundCopyJobHttpOptions, как это:

var jobHttpOptions = job as BITS4.IBackgroundCopyJobHttpOptions;

Я должен был также сделать

using BITS4 = BITSReference4_0;

Тогда я мог бы

jobHttpOptions.SetCustomHeaders (text); 

где текст - заголовок, который нужно установить. Вы можете установить несколько заголовков, просто конкатенируя большую строку ("referer: http://www.example.com/\r\nx-other-header: еще один заголовок \r\n"). Обратите внимание, что заголовки HTTP должны быть разделены с \r\n!

Похоже, ваш HTTP-сервер может быть несовместим с требованиями HTTP BITS

Требования HTTP для загрузки BITS

BITS поддерживает загрузку и выгрузку HTTP и HTTPS и требует, чтобы сервер поддерживал протокол HTTP/1.1. Для загрузки метод HTTP-сервера HTTP должен возвращать размер файла, а метод 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 байтов других заголовков.

  • Разрешить максимум два CR/LF между заголовками HTTP и первой строкой границы.

Для получения дополнительной информации проверьте эту ссылку

Другие вопросы по тегам