Загрузка XML из СБИС

1. Zhorland 27.04.23 16:32 Сейчас в теме
Через API СБИС получаю ссылку на документ вида https://disk.sbis.ru/disk/api/v1/длинная_длинная_строка.
В браузере при переходе по ссылке в итоге получаю XML-документ.
Если пытаюсь получить его программно, то в ответ прилетает то 302, то 307 код...
	
ИмяВходящегоФайла = "t:\1.xml";
СерверИсточник = "disk.sbis.ru";
Адрес = Новый HTTPЗапрос("/disk/api/v1/длинная_длинная_строка"); 
НТТР = Новый HTTPСоединение(СерверИсточник,443,,,,15,Новый ЗащищенноеСоединениеOpenSSL());
Ответ = НТТР.ОтправитьДляОбработки(Адрес, ИмяВходящегоФайла);

Куда копать?
Может, можно XML сразу через API СБИС получить, но в описалове не нашел ничего похожего.
По теме из базы знаний
Найденные решения
8. Zhorland 19.06.23 16:52 Сейчас в теме
Решение:
	СерверИсточник = "online.sbis.ru";
	ВременноеИмяВходящегоФайла = ПолучитьИмяВременногоФайла("xml");
	Адрес = Новый HTTPЗапрос("/disk/api/v1/длинная_длинная_строка"); 
	Адрес.Заголовки.Вставить("Content-Type","application/json-rpc;charset=utf-8");
	Адрес.Заголовки.Вставить("User-Agent","1С");
	Адрес.Заголовки.Вставить("X-SBISSessionID", Сессия);
	НТТР = Новый HTTPСоединение(СерверИсточник,443,,,,15,Новый ЗащищенноеСоединениеOpenSSL());
	Ответ = НТТР.Получить(Адрес, ВременноеИмяВходящегоФайла);
	Если Ответ.КодСостояния = 200 Тогда 
		ЗаголовокКонтент = Ответ.Заголовки["content-disposition"];
		ИмяФайлаСБИС = СтрРазделить(ЗаголовокКонтент,"'", Ложь)[1];
		ПереместитьФайл(ВременноеИмяВходящегоФайла, "Путь_куда_положить_файл_XML");
	КонецЕсли;

Показать
чингачгук; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
6. spacecraft 27.04.23 20:02 Сейчас в теме
(1) где Заголовки запроса? Где авторизация?
Посмотреть какой адрес перенаправления возвращается.
2. dka80 21 27.04.23 17:22 Сейчас в теме
проверьте РеГиСтР букв в адресе
4. Zhorland 27.04.23 19:48 Сейчас в теме
(2)
Из рабочей ссылки пример, не в регистре дело.
3. antz 27.04.23 18:22 Сейчас в теме
Так может get-запрос нужен? Тогда

Ответ = HTTP.Получить(Адрес, ИмяВходящегоФайла);
5. Zhorland 27.04.23 19:49 Сейчас в теме
(3)
Изначально так и пробовал, тоже не получилось.
7. antz 28.04.23 10:51 Сейчас в теме
(5) Посмотрел как я делал - стучусь на online.sbis.ru, запрос - disk/api/v1/длинная_строка, в заголовках передаю id сессии, content-type и user-agent. Попробуйте, в общем

СерверИсточник = "online.sbis.ru";


И запрос - GET, то есть Соединение.Получить.
8. Zhorland 19.06.23 16:52 Сейчас в теме
Решение:
	СерверИсточник = "online.sbis.ru";
	ВременноеИмяВходящегоФайла = ПолучитьИмяВременногоФайла("xml");
	Адрес = Новый HTTPЗапрос("/disk/api/v1/длинная_длинная_строка"); 
	Адрес.Заголовки.Вставить("Content-Type","application/json-rpc;charset=utf-8");
	Адрес.Заголовки.Вставить("User-Agent","1С");
	Адрес.Заголовки.Вставить("X-SBISSessionID", Сессия);
	НТТР = Новый HTTPСоединение(СерверИсточник,443,,,,15,Новый ЗащищенноеСоединениеOpenSSL());
	Ответ = НТТР.Получить(Адрес, ВременноеИмяВходящегоФайла);
	Если Ответ.КодСостояния = 200 Тогда 
		ЗаголовокКонтент = Ответ.Заголовки["content-disposition"];
		ИмяФайлаСБИС = СтрРазделить(ЗаголовокКонтент,"'", Ложь)[1];
		ПереместитьФайл(ВременноеИмяВходящегоФайла, "Путь_куда_положить_файл_XML");
	КонецЕсли;

Показать
чингачгук; +1 Ответить
9. чингачгук 24 25.07.23 16:15 Сейчас в теме
Спасибо, помогло! Делаю прогрузку кодов маркировки, все данные возвращаются по API в структуре ответа, а сами коды какого-то... засунуты во вложение в XML файл.

Если что вот код разбора самого xml, после получения, чтобы вытащить из него коды маркировки:
код разбора xml
Zhorland; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот