|
Отправка 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
|
Это ж какая такая религия мешает попробовать (!!!) экранирование? )))
з.ы. Контур.Диадок при циклическом запросе данных возвращает индексный ключ с символами, требующие при следующей отправке экранирования. Это я к тому, что "не надо бояться" ))) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |