Имя: Пароль:
1C
 
Ошибка разбора XML
,
0 Chebchic1
 
14.02.25
09:30
Добрый всем читающим.
Нужно разобрать 6 различных xml от поставщиков (формат почти совпадает).
Два отрабатывают нормально, у четырех ошибка:
[ОшибкаВоВремяВыполненияВстроенногоЯзыка]
по причине:
Ошибка разбора XML:  - [1,50]
Фатальная ошибка:
Space required after the Public Identifier
SystemId: http://export.hyundai-direct.biz/yml_get/tbky2fcth2pg

кеш пользователя и сервера чистил - не помогло.
Может что кто подскажет?
1 Волшебник
 
14.02.25
09:38
может пробельчик добавить?
2 Chebchic1
 
14.02.25
10:43
куда? хмл формирую не я
3 Волшебник
 
14.02.25
10:45
сделайте предварительную обработку полученного XML
4 Chebchic1
 
14.02.25
10:46
ЧтениеXML = Новый ЧтениеXML();
ЧтениеXML.ОткрытьФайл("http://export.hyundai-direct.biz/yml_get/tbky2fcth2pg",  ,);
ОбъектXDTOизФайла = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);

вот код
5 Волшебник
 
14.02.25
10:49
так это не XML, а YML
6 arsik
 
гуру
14.02.25
10:50
(2) Ты их читаешь сразу через веб? Попробуй скачать и из файла прочитать.
Если работает - тогда тебе сервер почему то не отдает.
7 arsik
 
гуру
14.02.25
10:53
(4) Хмм. Вроде как xml через редиректы отдает. Смотри в мануале, как это файл правильно получить.
8 Voronve
 
14.02.25
11:27
(0) "Два отрабатывают нормально"
у тебя в них в начале есть строчка "<?xml version="1.0" encoding="UTF-8"?> - стандартный заголовок XML; ЧтениеXML такое открывает корректно

"у четырех ошибка"
у остальных такой строчки нет, ЧтениеXML обламывается.
надо открывать как DOMДокумент
9 Chebchic1
 
14.02.25
11:35
ошибка возникает на строке
ОбъектXDTOизФайла = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);

Как сделать предварительную обработку?
Перебрать файл последовательно?
10 Chebchic1
 
14.02.25
11:36
(8) попробую
11 Fedor-1971
 
14.02.25
12:31
(10) лучше сначала получи чудо-юдо через HTTP в виде строки,
проверь оный на корректность и потом скармливай чтению XML
Примерно так:
локСоединение = новый HTTPСоединение("http://export.hyundai-direct.biz");
ЗапросЗапцацак = Новый HTTPЗапрос("/yml_get/tbky2fcth2pg");
Результат = локСоединение.Получить(ЗапросЗапцацак); 

Если Результат.КодСостояния = 200 тогда
   чтоПолучили = Результат.ПолучитьТелоКакСтроку();

... тут извращаешься как нравится .... В теории, тебе могут отдать JSON или форматированный текст

   нов = новый ЧтениеXML;
   нов.УстановитьСтроку(чтоПолучили);
КонецЕсли;
12 Chebchic1
 
14.02.25
13:29
(11) час от часу...

[ОшибкаВоВремяВыполненияВстроенногоЯзыка]
по причине:
Ошибка работы с Интернет:  Couldn't resolve host name
[ОшибкаСети]
если так делаю
13 Волшебник
 
14.02.25
13:32
14 arsik
 
гуру
14.02.25
13:46
(12) Там неправильно. Надо вот так.
локСоединение = новый HTTPСоединение("export.hyundai-direct.biz", 443,,,,,Новый ЗащищенноеСоединениеOpenSSL);

Да и получит там фигню какую ни будь. Там 2 редиректа, получение куков и уже запрос к основному с этими куками.
15 Chebchic1
 
14.02.25
13:47
(14) а так
Результат.КодСостояния = 404
16 Garykom
 
гуру
14.02.25
13:47
не проще для новичка КопироватьФайл ?
в темп а затем оттуда читать
или КопироватьФайл тоже не умеет в редиректы?
17 arsik
 
гуру
14.02.25
13:54
(15) Ты что-то напутал. У меня как и нужно 301 возвращает.
18 arsik
 
гуру
14.02.25
14:10
Сорян. Там 1 редирект. И куки в принципе не важны.
19 Chebchic1
 
14.02.25
14:31
(17) да, сорян, случайно пробел в конце поставил.
Сделал как в (17), так же получил кодсостояния = 301, а дальше то что? как к следующей строке перейти?
20 Chebchic1
 
14.02.25
14:31
(16) попробовал Копироватьфайл - ничего не сохраняет ни
КопироватьФайл("http://export.hyundai-direct.biz/yml_get/tbky2fcth2pg" ,"e:\1С");
ни
КопироватьФайл("https://export.hyundai-direct.biz/yml_get/tbky2fcth2pg" ,"e:\1С");
21 Garykom
 
гуру
14.02.25
14:37
(20) эмм
КопироватьФайл (FileCopy)
Синтаксис:
КопироватьФайл(<ИмяФайлаИсточника>, <ИмяФайлаПриемника>)
Параметры:
<ИмяФайлаИсточника> (обязательный)
Тип: Строка.
Полное имя файла-источника.
<ИмяФайлаПриемника> (обязательный)
Тип: Строка.
Полное имя файла-приемника.
22 Ёпрст
 
14.02.25
14:35
23 Garykom
 
гуру
14.02.25
14:35
ну и в браузере если твою ссылку открыть
http://export.hyundai-direct.biz/yml_get/tbky2fcth2pg
то в итоге строка получается
https://export.hyundai-direct.biz/yml_get/2
24 arsik
 
гуру
14.02.25
14:41
(19) Смотри (18)
Можно еще воспользоваться https://github.com/vbondarevsky/Connector - там автоматически редиректы читает
25 Chebchic1
 
14.02.25
14:40
(22) спасибо
26 Chebchic1
 
14.02.25
14:40
(21) блин, файл приемник не дописал, многозадачность - зло, спасибо
27 Garykom
 
гуру
14.02.25
15:03
(16)+ КопироватьФайл не умеет в редирект
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="http://export.hyundai-direct.biz/yml_get/2.

target="_blank">http://export.hyundai-direct.biz/yml_get/2.

" target="_blank">here.

" target="_blank">http://export.hyundai-direct.biz/yml_get/2">here.


<hr>
<address>Apache/2.4.55 (Unix) Server at export.hyundai-direct.biz Port 80</address>
</body></html>
28 arsik
 
гуру
14.02.25
14:52
(27) Апач? Странно как-то.
<address>Apache/2.4.55 (Unix) Server at export.hyundai-direct.biz Port 80</address>

У меня в (17) nginx :)
29 Garykom
 
гуру
14.02.25
15:02
(28) ты по httpS делал
там вероятно за nginx стоит apache
30 Chebchic1
 
14.02.25
15:08
(22) обработка в БП 3,0 выдает ошибку [ОшибкаВоВремяВыполненияВстроенногоЯзыка]
по причине:
Произошла исключительная ситуация (0x800a004c)
[ОшибкаИспользованияВстроенногоЯзыка]
31 Chebchic1
 
14.02.25
15:08
(24) блин, все по новой переделывать не хотелось бы
32 vbus
 
14.02.25
15:20
А что, нельзя так?
curl -L -i https://export.hyundai-direct.biz/yml_get/tbky2fcth2pg -o hynd.txt
33 Chebchic1
 
14.02.25
15:16
(18) сработало, получил тело как строку, попробую его сейчас в фабрику.
34 Chebchic1
 
14.02.25
15:16
(32) куда и как это вписать?
35 arsik
 
гуру
14.02.25
15:18
(29) Я так и так попробовал. У меня тоже через "КопироватьФайл " апач ответ отдает. Там конечно в любом случае снаружи нгинкс стоит.
36 vbus
 
14.02.25
15:19
windows 10 -> cmd
37 arsik
 
гуру
14.02.25
15:27
(32) можно, но только без "-i"
38 vbus
 
14.02.25
15:33
(37) Можно и с -i и без -i это заголовки пишет, редиректов.
39 arsik
 
гуру
14.02.25
15:34
(38) 🤦
40 vbus
 
14.02.25
15:38
(39)  
-i, --include               Include response headers in output
41 arsik
 
гуру
14.02.25
15:44
(40) Это уже станет не xml
42 Garykom
 
гуру
14.02.25
15:46
А в БП 3.0 нигде (например в БСП) нет готовых процедур/функций для скачивания файлов по http/https c учетом редиректов?
Там же загрузки курсов валют, НСИ и прочие ЭДО
43 arsik
 
гуру
14.02.25
15:58
(42) :) Есть
ПолучениеФайловИзИнтернета.СкачатьФайл()
ПолучениеФайловИзИнтернетаКлиент.СкачатьФайлНаКлиенте()