Имя: Пароль:
1C
1С v8
Отправка http запроса
,
0 Spyke
 
12.07.23
16:57
При отправке http запрос с типом "application/x-www-form-urlencoded" и телом запроса
Один из параметров тела это JSON и если в нем есть параметр "value": "010ххххххх154156215?7E&afQUlDOp"
Содержащий & при отправке такого запроса из 1С ответ от сервера приходит [orderBundle] неверен Unexpected end-of-input: was expecting closing quote for a string value
А вот при отправке через Postman нет такой ошибки
1 Spyke
 
12.07.23
16:59
+ (0) Без символа & ошибки нет и в 1С
Установка тела
ЗапросHTTP.УстановитьТелоИзСтроки(_ТелоЗапроса
                       КодировкаТекста.UTF8, ИспользованиеByteOrderMark.Использовать);
2 Галахад
 
гуру
12.07.23
17:03
Может экранировать?
3 Spyke
 
12.07.23
17:08
(2) Не тогда он неправильно воспримет строку  ИМХО в документации написанно
Возможные форматы для передачи:

В шестнадцатеричном представлении - HEX кодировке с пробелами. Здесь необходимо cоответствие с маской 1 байт - пробел - 1 байт (два символа в шестнадцатеричном виде). Также необходимо указать код товара в соответствии с требованиями Честного Знака (максимальная длина - 95 символов).
В виде строки, если передача идет не в HEX кодировке.

Я передаю в виде строки и через Postman все уходит, боюсь экранирование воспримется символ строки, это же не в урл а в параметре тела
4 lodger
 
12.07.23
18:39
(3) а ты, перекрестясь, экранируй.
5 Fragster
 
гуру
12.07.23
18:46
Глобальный контекст (Global context)
КодироватьСтроку (EncodeString)
Синтаксис:
КодироватьСтроку(<Строка>, <СпособКодированияСтроки>, <КодировкаСтроки>)
Параметры:
<Строка> (обязательный)
Тип: Строка.
Кодируемая строка.
<СпособКодированияСтроки> (обязательный)
Тип: СпособКодированияСтроки.
Способ кодирования строки.
<КодировкаСтроки> (необязательный)
Тип: Строка.
Кодировка, в которую преобразуется строка перед кодированием.
Значение по умолчанию: UTF8.
Возвращаемое значение:
Тип: Строка.
Описание:
Кодирует строку в соответствии с выбранным способом кодирования.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Пример:
Стр1 = КодироватьСтроку("http://tools.ietf.org/папка/rfc2822",
                СпособКодированияСтроки.КодировкаURL);
Стр2 = КодироватьСтроку("http://tools.ietf.org/папка/rfc2822",
                СпособКодированияСтроки.URLВКодировкеURL);
Стр3 = РаскодироватьСтроку(
                "http://ru.wikipedia.org/wiki/Шар",
                СпособКодированияСтроки.КодировкаURL);

Сообщить(Стр1);
Сообщить(РаскодироватьСтроку(Стр1,
                СпособКодированияСтроки.КодировкаURL));
Сообщить(Стр2);
Сообщить(РаскодироватьСтроку(Стр2,
                СпособКодированияСтроки.КодировкаURL));
Сообщить(Стр3);
Сообщить(КодироватьСтроку(Стр3,
                СпособКодированияСтроки.URLВКодировкеURL));
См. также:
СпособКодированияСтроки
Глобальный контекст, метод РаскодироватьСтроку
Использование в версии:
Доступен, начиная с версии 8.3.1.
     Методическая информация
6 Fragster
 
гуру
12.07.23
18:47
а application/x-www-form-urlencoded намекает, что нужно использовать СпособКодированияСтроки.КодировкаURL
7 Spyke
 
12.07.23
20:51
(6) (4) В постмане запрос отправляется без экранирования
8 Смотрящий
 
12.07.23
21:25
(7) Постман сделант так что нивелирует олибуи джунов.
впрочем ошибки сеньоров он так же - нивелирует.
Джун - точи запрос.
9 Spyke
 
12.07.23
21:34
(8) WinHttp.WinHttpRequest тоже прекрасно справляется
10 Смотрящий
 
12.07.23
21:38
(9) и постман и WinHttp.WinHttpRequest запрос отправляют. запрос корретный и запрос получает ответ ...
а ТВОЙ запрос - не работает.
я ничего не упустил ?
11 Смотрящий
 
12.07.23
21:40
12 Spyke
 
12.07.23
21:42
10) Так ответ с ошибкой

        Соединение = Новый HTTPСоединение("securepayments.sberbank.ru", 443, , , , 10, Новый ЗащищенноеСоединениеOpenSSL);
    
    _СтруктураДляЗапроса = ПолучитьСтруктуруЗапросаПоЗаказу(ЗаказКлиента, ТипСсылки);
    
    Если _СтруктураДляЗапроса = Неопределено Тогда
        
        Возврат Неопределено;
        
    КонецЕсли;
    
    _ТелоЗапроса = ДополнительныеСервисныеВозможности.ВернутьТелоЗапросаПоСтруктуре(_СтруктураДляЗапроса.СтруктураДанных);
    
    ЗапросHTTP = Новый HTTPЗапрос("payment/rest/register.do");
    ЗапросHTTP.Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");
        
    ЗапросHTTP.УстановитьТелоИзСтроки(_ТелоЗапроса,
                       КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
    
    Ответ = Соединение.ВызватьHTTPМетод("POST", ЗапросHTTP);

Так ответ без ошибки

       _СтруктураДляЗапроса = ПолучитьСтруктуруЗапросаПоЗаказу(ЗаказКлиента, ТипСсылки);
    
    Если _СтруктураДляЗапроса = Неопределено Тогда
        
        Возврат Неопределено;
        
    КонецЕсли;
    
    _ТелоЗапроса = ДополнительныеСервисныеВозможности.ВернутьТелоЗапросаПоСтруктуре(_СтруктураДляЗапроса.СтруктураДанных);
        
     WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
     WinHttp.Option(2,"utf-8");
     WinHttp.Open("POST","https://securepayments.sberbank.ru/payment/rest/register.do",0);
     WinHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8");

     WinHttp.Send(_ТелоЗапроса);
13 Spyke
 
12.07.23
21:48
(8) Так что Лид есть идеи
14 Hmster
 
12.07.23
22:13
ЗапросHTTP.Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");
WinHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8");

Таки заголовки отличаются
15 Spyke
 
12.07.23
22:26
(14) Нет уже пробывал
16 Hmster
 
12.07.23
23:35
я могу только посоветовать на свой какой ресурс отправить запрос и там посмотреть что же именно приходит в одном и другом случае
17 big
 
13.07.23
04:44
Это ж какая такая религия мешает попробовать (!!!) экранирование? )))

з.ы. Контур.Диадок при циклическом запросе данных возвращает индексный ключ с символами, требующие при следующей отправке экранирования. Это я к тому, что "не надо бояться" )))
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.