Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 02:46

1c 8.3 HTTPСоединение, метод PUT

Автор assest, 14 окт 2015, 10:14

0 Пользователей и 1 гость просматривают эту тему.

assest

Итак, есть задача: отправить файл по WebDav'у на Яндекс диск.
Функции скачать, создать папку и удалить файл уже реализованы мной. Пример:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Токен = "МойТокен";
Соединение = новый HTTPСоединение("webdav.yandex.ru",443,,,,,Новый ЗащищенноеСоединениеOpenSSL);

Заголовки = Новый Соответствие;
Заголовки.Вставить("Host","webdav.yandex.ru");
Заголовки.Вставить("Accept","*/*");
Заголовки.Вставить("Authorization", "OAuth "+Токен);

Запрос = Новый HTTPЗапрос("webdav.yandex.ru",Заголовки);

Ответ = Соединение.ВызватьHTTPМетод("GET /Koala.jpg HTTP/1.1",Запрос);
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Обработка спокойно получает файл.

НО в методе PUT Необходимо присоединить сам файл, вроде как его надо добавить в тело запроса например так:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Ответ= Соединение.ВызватьHTTPМетод("PUT /22/dd.jpg HTTP/1.1
|"+Символы.ПС+Символы.ПС+(Новый ДвоичныеДанные(Путь)), Запрос);
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Но если мы начинаем добавлять перенос строки в тело запроса, он либо выдает мне синтаксическую ошибку, либо перестает читать что либо после " HTTP/1.1".
Я пробовал передавать заголовки в теле запроса-не работает(не авторизуется, т.е. не видит заголовка с авторизацией), пробовал передавть что либо с помощью метода
HTTPЗапрос.УстановитьТелоИзСтроки() - Все в том числе и явные ошибки игнорируются.

Дальше всего я продвинулся на коде, где я не присоединяю файл,WebDebager говорит мне что я заявляю файл 17 байт, а отправляю 0, если присоединяю файл, он не проходит аунтификацию
Токен = "МойТокен";
Путь = "C:\Users\alexander\Pictures\1.txt";
Файл = Новый Файл(Путь);
Соединение = новый HTTPСоединение("webdav.yandex.ru",443,,,,,Новый ЗащищенноеСоединениеOpenSSL);
Заголовки = Новый Соответствие;    Заголовки.Вставить("Accept","*/*");
Заголовки.Вставить("Host","webdav.yandex.ru");
Заголовки.Вставить("Authorization", "OAuth "+Токен);
Заголовки.Вставить("Etag",   ХЕШMD5 (Путь));
Заголовки.Вставить("Sha256", ХЕШ    (Путь));
Заголовки.Вставить("Content-Type", "application/binary");
Заголовки.Вставить("Expect", "100-continue");
Заголовки.Вставить("Content-Length", СтрЗаменить(Файл.Размер()," ",""));
Запрос = Новый HTTPЗапрос("",Заголовки);    Запрос.УстановитьИмяФайлаТела(Путь);
Ответ= Соединение.ВызватьHTTPМетод("PUT /22/dd.jpg HTTP/1.1", Запрос);

ВОПРОС:
Как мне передать файл в HTTPСоединение, в теле запроса или как то иначе? в чем моя ошибка?.

дфтын


Похожие темы (5)

Рейтинг@Mail.ru

Поиск