Имя: Пароль:
1C
1С v8
Как в get-запрос засунуть тело?
, ,
0 VKS
 
03.10.19
19:37
Добрый вечер

Читаю документацию к api, есть метод запроса статуса документа. Вот пример из документации:

Пример:
--request GET \
  --url {url подключения}/api/getStatus \
    --data '[
    {
        "Id": "123456789",
        "Id_doc": "555"
    }
             ]'


И что-то не соображу, как тело поместить в get-запрос. Т.е. указанные параметры "Id": "123456789", "Id_doc": "555" должны находиться не в самом запросе, как обычно я пишу ?id=123456789&Id_doc=555 а именно в теле get-запроса.
Но всегда думал что у get нет тела. Попробовал использовать УстановитьТелоИзСтроки, где в качестве строки засунул json структуру приведенную выше, но сервер выдает ошибку ": пустая строка JSON".

Понимаю, что правильно спрашивать не тут, а у разработчиков API, но пока такой возможности нет. Может я каких-то очевидных вещей не замечаю и тут все просто?
1 mikecool
 
03.10.19
19:47
а джонсона как параметр засунуть можно?
2 VKS
 
03.10.19
19:49
наверное так и нужно, но не пойму как это сделать?
3 ДенисЧ
 
03.10.19
19:51
А попробуй то же самое ПОСТом отправить. В урле твои параметры, дату в тело запроса.
4 VKS
 
03.10.19
19:53
(1) вернее так, я по документации не понимаю, какой должен быть параметр, чтобы в него засунуть json
(3) постом сразу ошибка 503, т.е. там реально должен быть get-запрос
5 runoff_runoff
 
03.10.19
19:53
еще PUT запросы есть.. например.. в Яндекс.Маркет..
6 VKS
 
03.10.19
19:54
Вся документация это:

Запроса статуса документа

Пример:
--request GET \
  --url {url подключения}/api/getStatus \
    --data '[
    {
        "Id": "123456789",
        "Id_doc": "555"
    }
             ]'


И какой получите ответ
7 VKS
 
03.10.19
19:57
(5) пробовал, сразу ошибка 503. В (0) когда отправляю get получаю ошибку 500 с описанием, что у меня пустая строка JSON
8 ДенисЧ
 
03.10.19
19:58
А если эту дату таки в урл запихать? Именно так, &data='...'
9 VKS
 
03.10.19
20:06
(8) я только как не пробовал в параметры засунуть, и параметром и jsonом и так пробовал, всегда ошибка 503
единственное когда ошибка 500 это если
HTTPЗапрос = Новый HTTPЗапрос("/api/getStatus") без параметров
10 DTX 4th
 
03.10.19
20:13
https://stackoverflow.com/questions/978061/http-get-with-request-body

Это уже Post.
Сегодня как раз не смог отправить Пост запрос стандартными средствами языка..
Никак тело не устанавливалось. Я даже не смог найти в СП, как файл в тело подложить. В общем, печальная 1С

Вроде вот тут раньше можно было файл подсунуть, но сейчас пусто:
https://i.imgur.com/OmrNnhm.png
11 Garikk
 
03.10.19
21:14
в GET нелья передавать body, это противоречит стандарту, даже если получится это сделать то не факт что это будет работать корректно в дальнейшем и какойнить фаерволл или прокси его не сломает
12 Юрий Лазаренко
 
03.10.19
21:19
(1) Можно
(0) Попробуй для полученного JSON применить КодироватьСтроку и просто прикрепи его к GET-запросу после "?"
13 MyNick
 
03.10.19
22:00
Если в Get запрос засунуть тело, то получится Post. Наличие тела, это как раз то что отличает пост от гет.

Это примерно как к бабушке приделать уй.
Если бы у бабушки был уй, то она была бы дедушкой.
14 Garykom
 
гуру
03.10.19
22:07
(0) Последние стандарты http разрешают тело для GET запросов.
Но не факт что 1С'ное HTTPСоединение не игнорирует установленное тело для GET.

Попробуй ВызватьHTTPМетод("GET")
15 Garykom
 
гуру
03.10.19
22:13
Ну и попробуй с [ ] или без них сразу {}
16 VKS
 
03.10.19
22:32
(14) об этом речь?

HTTPСоединение (HTTPConnection)
ВызватьHTTPМетод (CallHTTPMethod)
Синтаксис:

ВызватьHTTPМетод(<HTTPМетод>, <HTTPЗапрос>, <ИмяВыходногоФайла>)
Примечание:
При использоватения метода GET тело запроса на сервер отправлено не будет.
17 Garykom
 
гуру
03.10.19
22:35
(16) Ну значит обломс.
Попробуй чем то другим тем же Postman или curl проверить.
18 OpKc
 
04.10.19
06:30
(13) Возможно, свобода и толерантность в вопросах гендерной идентификации добралась и до HTTP-запросов и теперь любой запрос, вне зависимости от наличия у него тела, может быть GET-запросом. Так же, как и любой дедушка с уем может сменить пол в документах на Жо.
19 craxx
 
04.10.19
06:39
(0)никак. только в POST
20 PloAl
 
04.10.19
07:57
(0) В get не бывает тела.
Данные в вашем случае это параметры, параметры от урл отделяются знаком вопроса.
Должно быть что то вроде
/api/getStatus?Id=123456789&Id_doc=555
21 VKS
 
04.10.19
11:24
Действительно нужно делать через тело get-запроса. Как мне подсказали некий "сырой запрос" когда шлет raw json
Попробовал это сделать в postman, да действительно все работает. Но теперь не пойму, как это сделать на стороне 1С.
Кто сталкивался, подскажите как сделать подобное?
22 Garikk
 
04.10.19
11:39
(14) а толку, его любой прокси поломает... это только браузеры можно обновлять по десять раз в месяц
23 Daluvan
 
04.10.19
11:41
(21) В 1с гет нет тела есть только заголовок. В пост ещё тело. Попробуй через заголовок передать.
24 Garykom
 
гуру
04.10.19
11:47
(21) Пиши в 1С чтобы платформу исправили под современный RFC который допускает тело у GET.
25 VKS
 
04.10.19
11:48
(23) такой вариант перепробовал и в 1с и в postman. И через параметры и через заголовки. Работает только через тело
26 Daluvan
 
04.10.19
12:02
(25) Ну тогда на с++ к примеру или скриптах и вставь в 1с.
27 manc88
 
04.10.19
12:31
Попробуй через winhttp если на винде сидишь:

WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.Open("GET", "{url подключения}/api/getStatus", Ложь);
WinHttp.Send(ТвойДжейсон);
Если WinHttp.Status = 200 Тогда
    Сообщить(WinHttp.ResponseText);
КонецЕсли;
28 VKS
 
04.10.19
13:01
кстати да, попробую такой вариант, спасибо

Пока сделали через опу, сперва коопсайт получает данные с api, а потом уже классическим get-запросом с параметрами отдает в 1с
29 Скиурус
 
04.10.19
13:15
(0)должно быть:
?data="{id:123456789,Id_doc:555}"

Экранировку символов 1С сама сделает
30 VKS
 
04.10.19
13:43
нет, не работает этот вариант. Тут именно вся фишка передавать json в теле запроса, а не в адресе ресурса