Как получить данные от 1С Odata Post запросом с фиьтром в теле запроса?

1. baracuda 2 08.07.21 09:31 Сейчас в теме
Проблема в том, что если я все фильтры пишу в параметрах GET запроса, то я быстро достигаю ограничения сервера на длину допустимого url.
Например, следующий url уже дает ошибку:
http://****.***.**.***/Apteka/odata/standard.odata/InformationRegister_Штрихкоды?$format=application/json;odata=nometadata&$inlinecount=allpages&$filter=(Владелец eq cast (guid'c24c93de-85ed-11e9-9bec-e0d55e5ecc06', 'Catalog_Номенклатура') and startswith(Штрихкод, '2') eq false) or (Владелец eq cast (guid'd2a07a96-85ed-11e9-9bec-e0d55e5ecc06', 'Catalog_Номенклатура') and startswith(Штрихкод, '2') eq false) or (Владелец eq cast (guid'd2a07aba-85ed-11e9-9bec-e0d55e5ecc06', 'Catalog_Номенклатура') and startswith(Штрихкод, '2') eq false) or (Владелец eq cast (guid'fc040b35-85ee-11e9-9bec-e0d55e5ecc06', 'Catalog_Номенклатура') and startswith(Штрихкод, '2') eq false) or (Владелец eq cast (guid'0d1266f9-85ef-11e9-9bec-e0d55e5ecc06', 'Catalog_Номенклатура') and startswith(Штрихкод, '2') eq false) or (Владелец eq cast (guid'544252c2-85ef-11e9-9bec-e0d55e5ecc06', 'Catalog_Номенклатура') and startswith(Штрихкод, '2') eq false) or (Владелец eq cast (guid'712c01bd-85f0-11e9-9bec-e0d55e5ecc06', 'Catalog_Номенклатура') and startswith(Штрихкод, '2') eq false) or (Владелец eq cast (guid'ae3edb53-85f0-11e9-9bec-e0d55e5ecc06', 'Catalog_Номенклатура') and startswith(Штрихкод, '2') eq false) or (Владелец eq cast (guid'd4e6f874-85f0-11e9-9bec-e0d55e5ecc06', 'Catalog_Номенклатура') and startswith(Штрихкод, '2') eq false) or (Владелец eq cast (guid'19af4968-85f1-11e9-9bec-e0d55e5ecc06', 'Catalog_Номенклатура') and startswith(Штрихкод, '2') eq false) or (Владелец eq cast (guid'2ea4169a-85f1-11e9-9bec-e0d55e5ecc06', 'Catalog_Номенклатура') and startswith(Штрихкод, '2') eq false) or (Владелец eq cast (guid'3dbe0cc3-85f1-11e9-9bec-e0d55e5ecc06', 'Catalog_Номенклатура') and startswith(Штрихкод, '2') eq false) or (Владелец eq cast (guid'43cc5e47-85f1-11e9-9bec-e0d55e5ecc06', 'Catalog_Номенклатура') and startswith(Штрихкод, '2') eq false) or (Владелец eq cast (guid'4a29c275-85f1-11e9-9bec-e0d55e5ecc06', 'Catalog_Номенклатура') and startswith(Штрихкод, '2') eq false) or (Владелец eq cast (guid'761b0380-85f1-11e9-9bec-e0d55e5ecc06', 'Catalog_Номенклатура') and startswith(Штрихкод, '2') eq false) or (Владелец eq cast (guid'7c2b4576-85f1-11e9-9bec-e0d55e5ecc06', 'Catalog_Номенклатура') and startswith(Штрихкод, '2') eq false) or (Владелец eq cast (guid'88311d73-85f1-11e9-9bec-e0d55e5ecc06', 'Catalog_Номенклатура') and startswith(Штрихкод, '2') eq false) or (Владелец eq cast (guid'9147ee2a-85f1-11e9-9bec-e0d55e5ecc06', 'Catalog_Номенклатура') and startswith(Штрихкод, '2') eq false) or (Владелец eq cast (guid'9147ee2d-85f1-11e9-9bec-e0d55e5ecc06', 'Catalog_Номенклатура') and startswith(Штрихкод, '2') eq false) or (Владелец eq cast (guid'9147ee75-85f1-11e9-9bec-e0d55e5ecc06', 'Catalog_Номенклатура') and startswith(Штрихкод, '2') eq false) or (Владелец eq cast (guid'a8bd5c80-85f1-11e9-9bec-e0d55e5ecc06', 'Catalog_Номенклатура') and startswith(Штрихкод, '2') eq false) or (Владелец eq cast (guid'd5cd8aa1-85f1-11e9-9bec-e0d55e5ecc06', 'Catalog_Номенклатура') and startswith(Штрихкод, '2') eq false) or (Владелец eq cast (guid'dce45946-85f1-11e9-9bec-e0d55e5ecc06', 'Catalog_Номенклатура') and startswith(Штрихкод, '2') eq false) or (Владелец eq cast (guid'dce45947-85f1-11e9-9bec-e0d55e5ecc06', 'Catalog_Номенклатура') and startswith(Штрихкод, '2') eq false) or (Владелец eq cast (guid'dce45964-85f1-11e9-9bec-e0d55e5ecc06', 'Catalog_Номенклатура') and startswith(Штрихкод, '2') eq false) or (Владелец eq cast (guid'dce459ad-85f1-11e9-9bec-e0d55e5ecc06', 'Catalog_Номенклатура') and startswith(Штрихкод, '2') eq false) or (Владелец eq cast (guid'5dab4c0d-85f2-11e9-9bec-e0d55e5ecc06', 'Catalog_Номенклатура') and startswith(Штрихкод, '2') eq false) or (Владелец eq cast (guid'6ab1a7ac-85f2-11e9-9bec-e0d55e5ecc06', 'Catalog_Номенклатура') and startswith(Штрихкод, '2') eq false) or (Владелец eq cast (guid'b2cfb7b9-85f2-11e9-9bec-e0d55e5ecc06', 'Catalog_Номенклатура') and startswith(Штрихкод, '2') eq false) or (Владелец eq cast (guid'b967d095-85f2-11e9-9bec-e0d55e5ecc06', 'Catalog_Номенклатура') and startswith(Штрихкод, '2') eq false) or (Владелец eq cast (guid'8a9cd9b7-0545-11eb-9c3a-1c1b0de11bc6', 'Catalog_Номенклатура') and startswith(Штрихкод, '2') eq false) or (Владелец eq cast (guid'fa86a827-817b-11eb-9c58-1c1b0de11bc6', 'Catalog_Номенклатура') and startswith(Штрихкод, '2') eq false) or (Владелец eq cast (guid'f124463e-88bb-11eb-9c58-1c1b0de11bc6', 'Catalog_Номенклатура') and startswith(Штрихкод, '2') eq false)ndard.odata/InformationRegister_Штрихкоды?$format=application/json;odata=nometadata&$inlinecount=allpages&$filter=(Владелец eq cast (guid'4d0fc853-85ef-11e9-9bec-e0d55e5ecc06', 'Catalog_Номенклатура') and startswith(Штрихкод, '2') eq false) or (Владелец eq cast (guid'19af49db-85f1-11e9-9bec-e0d55e5ecc06', 'Catalog_Номенклатура') and startswith(Штрихкод, '2') eq false)


Ошибка такая:
The requested URL's length exceeds the capacity
		limit for this server.


На коротких url-ах с меньшим количеством фильтров, ответ сервера нормальный, данные отдает. Соответственно возникает вопрос, можно ли использовать параметры фильтров в теле POST запроса. В документации про это ни слова.. Делаю попытки накидать запросы в POSTMAN, пока безуспешно.
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. FatPanzer 08.07.21 09:49 Сейчас в теме
(1)
Соответственно возникает вопрос, можно ли использовать параметры фильтров в теле POST запроса.
Можно. Если API источника поддерживает такую возможность и расписан контракт тела POST-запроса.
3. baracuda 2 08.07.21 10:06 Сейчас в теме
(2) источник REST интерфейс ODATA от 1С.
4. herfis 499 08.07.21 10:16 Сейчас в теме
(1) Стандарт вроде как позволяет: https://devblogs.microsoft.com/odata/passing-odata-query-options-in-the-request-body/
А получится ли для 1С - расскажете :)
5. baracuda 2 08.07.21 10:36 Сейчас в теме
(4) то что стандарт позволяет я понял) в 1С пока не получается.. буду пробовать дальше.
6. starik-2005 3039 08.07.21 14:56 Сейчас в теме
(1)
На коротких url-ах с меньшим количеством фильтров, ответ сервера нормальный
А нафига Вы каждый раз проверяете, что ШК не начинается с "2"? Это уже помогло бы сэкономить кучу символов в строке. Ну и разбить запрос на несколько частей, опытным путем подобрав длину (1024 символа проходят?) ибо эти части совершенно независимы. Получайте по 10 ШК за раз - чем плохое решение?

А по поводу параметров в POST, то вот тут есть: https://ru.stackoverflow.com/questions/813745/1%D0%A1-%D0%BE%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B0-post-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%B0-%D1%81-%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%B0%D0%BC­%D0%B8
7. baracuda 2 09.07.21 10:18 Сейчас в теме
(6)
Это уже помогло бы сэкономить кучу символов в строке.

смысла экономить символов нет. Так как следуя логике моего приложения я могу запросить до 1000 штрихкодов за раз.
(6)
Ну и разбить запрос на несколько частей, опытным путем подобрав длину
/
над этим можно подумать если не осилю POST запрос данных из регистра сведенией.
(6)
А по поводу параметров в POST, то вот тут есть

проблема не с написанием POST запроса а с его структурой. Какой в таком случае будет URL запроса и каково должно быть тело запроса.
8. starik-2005 3039 09.07.21 10:45 Сейчас в теме
(7) урл - такой же, а тело - так по сцылке пример: парам1=блаблабла&парам2=блаблабла2
9. baracuda 2 09.07.21 11:03 Сейчас в теме
(8) да вроде так и делаю..
Прикрепленные файлы:
11. starik-2005 3039 09.07.21 13:42 Сейчас в теме
(9) в обсчем, есть мнение, что POST - это создание нового ресурса. Так что получить - только GET, поэтому придется получать порциями. Ну и убрать проверку на "2", оставив одну (в начале, например).
13. baracuda 2 09.07.21 14:50 Сейчас в теме
(11)
Ну и убрать проверку на "2", оставив одну (в начале, например).

я так и сделал, спасибо.
12. o4karek 09.07.21 13:53 Сейчас в теме
(1)
то я быстро достигаю ограничения сервера на длину допустимого url.

Ну так увеличьте длину допустимого УРЛ. Наверняка ИИС стоит: https://its.1c.ru/db/v83doc#bookmark:adm:TI000000988
baracuda; +1 Ответить
14. baracuda 2 09.07.21 16:16 Сейчас в теме
(12)
Ну так увеличьте длину допустимого УРЛ. Наверняка ИИС стоит

у меня Apache стоит. Пока сделал так. В файл apache/httpd.conf
добавил строки которые увеличивают максимально допустимую длина url в apache2.4

LimitRequestLine 1000000
LimitRequestFieldSize 1000000


вроде работает. Вам спасибо за интересную мысль.
Оставьте свое сообщение

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