Как в 1С получить файл XML с адреса "https://santrek.ru/api/yml"?

1. prog2019 48 01.03.24 15:43 Сейчас в теме
Если открывать адрес "https://santrek.ru/api/yml" в программе "Download Master" или "Postman", то они распознают эту страницу как XML (то есть, как и нужно).
Если открывать этот адрес в Firefox или делать http запрос в 1С, то сайт возвращает код ответа "301".

	СоединениеHttp = Новый HttpСоединение("santrek.ru");       
	Запрос = Новый HttpЗапрос("/api/yml/");               
	Ответ = СоединениеHttp.Получить(Запрос);
	Если Ответ.КодСостояния = 200 Тогда  
		Ответ_HTML = Ответ.ПолучитьТелоКакСтроку();   
	КонецЕсли;


Как в 1С загрузить XML с этого адреса?
Найденные решения
6. prog2019 48 01.03.24 18:16 Сейчас в теме
	Ответ_HTML = Ответ.ПолучитьТелоКакСтроку(); 
		Строка_Ответ_HTML = "";
		Строка_Ответ_HTML = Ответ_HTML;
		ИзмКав_Ответ_HTML = СтрЗаменить(Строка_Ответ_HTML, """, "_quot_");  //  сначала кавычку, т.к. в ней есть & 
		ИзмАмп_Ответ_HTML = СтрЗаменить(ИзмКав_Ответ_HTML, "&", "_amp_");


	НаименованиеКав = СтрЗаменить(name_Реквизит.ТекстовоеСодержимое, "_quot_", Символ(34));  //  Символ(34) - это двойная кавычка "   
		Наименование = СтрЗаменить(НаименованиеКав, "_amp_", Символ(38));  //  Символ(38) - это амперсанд &
7. prog2019 48 01.03.24 18:18 Сейчас в теме
СоединениеHTTPS = Новый HTTPСоединение("santrek.ru",,,,,,Новый ЗащищенноеСоединениеOpenSSL(),);
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
7. prog2019 48 01.03.24 18:18 Сейчас в теме
СоединениеHTTPS = Новый HTTPСоединение("santrek.ru",,,,,,Новый ЗащищенноеСоединениеOpenSSL(),);
2. starik-2005 3043 01.03.24 16:04 Сейчас в теме
С = Новый HTTPСоединение(Сервер, Порт, Юзер, Пассводр, таймаут, новый защищенноесоединениесслблаблабла()); // читайте синтаксис-помощник
З = Новый HTTPЗапрос(Урл);
О = С.Получить(З);
Смысл в том, что вы хттп дергаете, а нужно хттпС дергать. Вот он вам и редирект возвращает.
prog2019; +1 Ответить
3. prog2019 48 01.03.24 16:43 Сейчас в теме
Спасибо, дорогой друг!
Получилось загрузить XML.

Пользуясь случаем, ещё хочу спросить, как обойти фатальнейшую ошибку разбора XML?

Ошибка разбора XML: - [56,62]
Фатальная ошибка:
EntityRef: expecting ';'

В 56-й строке есть символ "амперсанд" "&". Он 60-й по счёту в строке.
После него буква "К", а дальше символ завершения узла "<", он 62-й по счёту в строке.

<category id="4530" parentId="3066"> Распродажа смесители D&K</category>

Видимо, из-за амперсанда программа хочет дальше увидеть символ "точка с запятой".
Прикрепленные файлы:
4. starik-2005 3043 01.03.24 17:19 Сейчас в теме
(3)
амперсанда
СтрЗаменить(ХМЛ, "&", "& amp;"); 
5. Sashares 34 01.03.24 17:40 Сейчас в теме
(4)если там будет "& amp;" получится "ой"...
Как и любые другие экранированные символы
8. prog2019 48 01.03.24 18:21 Сейчас в теме
Да, надо отслеживать опытным путём и добавлять необходимые условия.
13. starik-2005 3043 01.03.24 20:43 Сейчас в теме
(5) Ага, пробел убери, деятель искусств )))
14. Sashares 34 01.03.24 21:23 Сейчас в теме
(13)Пробел тут, чтобы движок форума не съедал символы после амперсанда.
Если до тебя не дошло, о чем я написал, повторю еще раз.
При использовании кода
СтрЗаменить(ХМЛ, "&", "& amp;"); 

Если в переменной ХМЛ уже есть экранированные символы, то они тоже заменятся, и там будет "& amp;amp;"
"& amp;gt;"
"& amp;quot"
и тд.

Давай пожалуйся еще, что это не твой код кривой, а инфостарт тебе его сломал))
15. starik-2005 3043 01.03.24 22:15 Сейчас в теме
(14)
что это не твой код кривой
Ты даже не попробовал, да? Ну ветра тебе попутного.
6. prog2019 48 01.03.24 18:16 Сейчас в теме
	Ответ_HTML = Ответ.ПолучитьТелоКакСтроку(); 
		Строка_Ответ_HTML = "";
		Строка_Ответ_HTML = Ответ_HTML;
		ИзмКав_Ответ_HTML = СтрЗаменить(Строка_Ответ_HTML, """, "_quot_");  //  сначала кавычку, т.к. в ней есть & 
		ИзмАмп_Ответ_HTML = СтрЗаменить(ИзмКав_Ответ_HTML, "&", "_amp_");


	НаименованиеКав = СтрЗаменить(name_Реквизит.ТекстовоеСодержимое, "_quot_", Символ(34));  //  Символ(34) - это двойная кавычка "   
		Наименование = СтрЗаменить(НаименованиеКав, "_amp_", Символ(38));  //  Символ(38) - это амперсанд &
9. prog2019 48 01.03.24 18:26 Сейчас в теме
Здесь в 4-й строке я написал "амперсанд quot точка с запятой".
Сайт автоматически преобразовал в кавычку.
10. Sashares 34 01.03.24 19:28 Сейчас в теме
(6) Не правильно.
Кавычки, амперсанд и др. символы экранируются только внутри значений текстовых полей.
Если вы замените во всем xml кавычки, то все значения атрибутов сломаются.
Прикрепленные файлы:
11. prog2019 48 01.03.24 20:08 Сейчас в теме
Загрузка уже вовсю работает, все кавычки в XML остались на месте.
Я заменяю не кавычки, а именно мнемонику (см. прилож. картинку).

Смотрите колонку "Мнемоника" в описании ASCII:
https://snipp.ru/handbk/table-ascii
Прикрепленные файлы:
12. prog2019 48 01.03.24 20:12 Сейчас в теме
(10) Я же написал в 9-м сообщении. Это сайт Инфостарт автоматически преобразовал мнемонику в кавычку в моём сообщении.
starik-2005; +1 Ответить
Оставьте свое сообщение

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