Загрузка 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 20 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 Ответить
Оставьте свое сообщение
Вакансии
1С-Программист (интегратор Битрикс24)
Санкт-Петербург
зарплата от 150 000 руб. до 250 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 100 000 руб.
Временный (на проект)

Разработчик 1С
Москва
зарплата от 150 000 руб.
Полный день

Программист
Санкт-Петербург
зарплата от 180 000 руб. до 240 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 150 000 руб. до 250 000 руб.
Полный день