Имя: Пароль:
1C
1С v8
Ошибка при выполнении HTTP Запроса
0 Ник080808
 
17.08.22
09:27
Есть web сервис покупателя. На 10 платформе получали заказы через http запрос и горя не знали. обновились на Платформа 8.3.18.1334. Теперь Ответ.ПолучитьТелоКакСтроку() возвращает:
<?xml version="1.0" ?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><S:Fault xmlns:ns3="http://www.w3.org/2003/05/soap-envelope" xmlns=""><faultcode>S:Client</faultcode><faultstring>Couldn't create SOAP message due to exception: XML reader error: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1]
Message: Content is not allowed in prolog.</faultstring></S:Fault></S:Body></S:Envelope>
Попробовал через Postman - выдает корректные данные. Восстановил копию на 10 платформе - работает нормально. Откатывать платформу или переходить на другую пока руководство не даст, ибо 500 пользователей, только этот переход выдохнули. Есть кто сталкивался с такой ошибкой?
1 vde69
 
17.08.22
09:31
ИХМО 18 платформа не удачная (слишком много косяков)

попробуй 20
2 МКК
 
17.08.22
09:31
Я ответа не знаю, но вот есть типа такого РаскодироватьСтроку(Ответ.ПолучитьТелоКакСтроку(), СпособКодированияСтроки.КодировкаURL)
3 Ник080808
 
17.08.22
09:34
(1) платформу поменять не вариант пока.
4 Ник080808
 
17.08.22
09:34
(2) не получилось(((
5 Ник080808
 
17.08.22
09:35
а есть какие то сторонние сервисы библиотеки которые можно прикрутить к 1с?
6 Kassern
 
17.08.22
09:38
(0) код ответа 200 приходит?
7 Kassern
 
17.08.22
09:39
"ибо 500 пользователей" - и без тестового контура?
8 Ник080808
 
17.08.22
09:40
(6) код ответа - 500; (7) у нас 4 1сника на 500 пользователей. в хлам переписанная комплексная автоматизация 1.0 какой тестовый контур?)
9 Kassern
 
17.08.22
09:43
(8) а на 10ой платформе ответ 200 так? Показывайте уже как запрос шлете. адрес, аунтификацию можно обезличить
10 Kassern
 
17.08.22
09:48
можно еще сравнить что вы отправляете из 10ой платформы и что отправляется из 18 через какой нибудь мониторинг
11 Ник080808
 
17.08.22
09:56
(9)  а на 10ой платформе ответ 200 так? - да, код 200
Соединение = Новый HTTPСоединение("*****",,,,,60,Новый ЗащищенноеСоединениеOpenSSL());
Запрос = Новый HTTPЗапрос("/wsedi/services/platform",ЗаголовокЗапросаHTTP(Метод));
Запрос.УстановитьТелоИзСтроки(ТекстЗапроса);
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
ОтветXML = Ответ.ПолучитьТелоКакСтроку();    
СтруктураXML = ПрочитатьСтрокуXML(ОтветXML);
Где
ЗаголовокЗапросаHTTP(Метод) -
    ЗаголовокЗапросаHTTP = Новый Соответствие();
    ЗаголовокЗапросаHTTP.Вставить("Content-Type", "text/xml;charset=UTF-8");    
    ЗаголовокЗапросаHTTP.Вставить("SOAPAction", "urn:wsedi/ListMBEx");
    ЗаголовокЗапросаHTTP.Вставить("Host", "******");
    ЗаголовокЗапросаHTTP.Вставить("Content-type", "text/xml");
    Возврат ЗаголовокЗапросаHTTP;
12 Ник080808
 
17.08.22
09:57
ТекстЗапроса:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:wsedi">
   <soapenv:Header/>
   <soapenv:Body>
      <urn:listMBEx>
         <name>123</name>
         <password>Admin</password>
         <documentType>ORDER</documentType>
         <dateFrom>2022-07-01</dateFrom>
         <dateTo>2022-07-14</dateTo>
      </urn:listMBEx>
   </soapenv:Body>
</soapenv:Envelope>
13 Ник080808
 
17.08.22
09:58
(10) а вот тут не понял. какой мониторинг?
14 Kassern
 
17.08.22
10:00
(13) всякие сниферы, фидлер тот же через прокси и т.д.
15 Ёпрст
 
17.08.22
10:01
(0) BOM
16 Kassern
 
17.08.22
10:04
А нужен ли тут http запорс? Я правильно понял, что у вас там именно ВЕБ сервис опубликован со своим wsdl?
Если так, то можно через Новый WSОпределения,  Новый WSПрокси работать с сервисом
17 Ёпрст
 
17.08.22
10:04
+15 ИспользованиеByteOrderMark.НеИспользовать воткни в УстановитьТелоИзСтроки
18 Ник080808
 
17.08.22
10:08
(17) Ты Гений! Правда, я понял это еще когда ты мне с запросом на 7ке 12 лет назад помог) Спасибо огромное! Все заработало
19 Kassern
 
17.08.22
10:10
(18) ну вот, а то все платформа виновата... У вас же штат 4 программиста, неужели никто с БОМ не сталкивался?)
20 Ник080808
 
17.08.22
10:13
(19) нит. проносило как то до этого). Вообще я мало работал с http запросами. надо будет осваивать их, а то без них никуда.
21 Kassern
 
17.08.22
10:17
(20) Я все же рекомендую вам за ВЕБ сервисы еще почитать, Если я правильно понял, то вашу задачу можно решить в (16) Без всяких HTTPСоединение
Вот небольшой кусочек кода для примера:

Определение = Новый WSОпределения("Путь до wsdl",,,,,ssl);
Прокси = Новый WSПрокси(Определение, "http://Сервер/delivery", "DocumentData", "DocumentDataSoap");
Прокси.Пользователь="Логин";
Прокси.Пароль="Пароль";
МассивДокументов = Прокси.GetData(ИДПользователя);
22 Ник080808
 
17.08.22
10:32
(21) спасибо. посмотрю.
23 Kassern
 
17.08.22
10:34
(22) Вот тут можете глянуть инфу https://infostart.ru/1c/articles/327963/
24 rozer76
 
17.08.22
10:39
+ (21) кста я тоже на вдуплил зачем ТС по http шлет soap-xml а не нативно через WSПрокси ))
25 Ник080808
 
17.08.22
10:44
(23) спасибо большое. (24) на это две причины: 1) обработку готовую взял у клиентов и просто допилил свои данные; 2) потому что не шарит как надо) будем учится.
26 rozer76
 
17.08.22
10:47
+ (17) ну видимо на том конце PHP который не умеет БОМ... (19) так он же 1сник, откуда ему знать - это должно быть прописано в апи сервиса )
27 Kassern
 
17.08.22
10:52
(26) "откуда ему знать" - методом проб и ошибок.
Типичные ошибки при http запросе
1) Защищенное соединение /порт
2) Корявый адрес сервера (пихают http  и прочую фигню)
3) Корявый адрес ресурса (урл кодировка, слеши и т.д.)
4) Корявые заголовки / аунтификация
5) Не верный метод (GET,POST,PUT...)
6) Корявое тело запроса / БОМ
28 Ник080808
 
17.08.22
10:57
я тут с вами уже статью по http запросам запилил в свою базу знаний.