|
1с 8 post запрос | ☑ | ||
---|---|---|---|---|
0
Gera1t
27.12.23
✎
13:27
|
Здравствуйте!
Помогите пожалуйста с post запросом Нужно отправить post запрос Вот мой код: HTTPСоединение = Новый HTTPСоединение(АдресСайта, , , , , , , ); ЗапросHTTP = Новый HTTPЗапрос(АдресAPI); ЗапросHTTP.Заголовки.Вставить("Content-type", "application/json; charset=utf-8"); ЗапросHTTP.УстановитьТелоИзСтроки("action=oneSActions" + "&data=" + ФайлJSON, КодировкаТекста.UTF8); HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(ЗапросHTTP); переменные например: АдресСайта = example.com АдресAPI = api/post Код который работает: function initScripts(){ document.querySelector(".click-on-me").addEventListener("click", (e) => { let f_data = new FormData(); srv_url = "http://example.com/api/post"; let json_data = { action: "getAllContragents", secret: "08e09ac9dbc8e7a6205d1c0c82fdff1e", } f_data.append("action", "oneSActions"); f_data.append("data", JSON.stringify(json_data)); try { const response = fetch(srv_url, { method: 'POST', // или 'PUT' body: f_data, // данные могут быть 'строкой' или {объектом}! }); response .then(res => { return res.json(); }) .then((res) => { console.log(res); }) } catch (error) { console.error('Ошибка:', error); } }) } Дело в том, что в ответ на мой запрос приходит ответ 500 Ответ на нижний код приходит корректный ответ Подскажите пожалуйста что с моим кодом не так? |
|||
1
Donkey_hot
27.12.23
✎
13:46
|
(0) АдресAPI = /api/post
|
|||
2
Donkey_hot
27.12.23
✎
13:49
|
(1) Ну и формирование тела запроса кривое какое-то.
|
|||
3
Gera1t
27.12.23
✎
13:51
|
(1)Все равно ответ 500
|
|||
4
Gera1t
27.12.23
✎
13:52
|
Меня смущает то, что я добавляю переменны стройкой, а там через FormData()
|
|||
5
Donkey_hot
27.12.23
✎
13:52
|
А ответ 500 возвращает какое-нибудь пояснение?
|
|||
6
Gera1t
27.12.23
✎
13:53
|
нет, просто 500 и все
|
|||
7
Donkey_hot
27.12.23
✎
13:55
|
(6) Попробуйте отправить просто {
action: "getAllContragents", secret: "08e09ac9dbc8e7a6205d1c0c82fdff1e", } Возможно, ошибка станет более информативной. |
|||
8
Gera1t
27.12.23
✎
13:57
|
(7) То же самое
let f_data = new FormData(); f_data.append("action", "oneSActions"); f_data.append("data", JSON.stringify(json_data)); вот тут как я понял формируется тело запроса, программист js мне говорят, что от 1с запрос приходят якобы не как post а как get |
|||
9
Gera1t
27.12.23
✎
13:58
|
может быть как то по другому отправить запрос или по другому тело запроса передать
|
|||
10
Gera1t
27.12.23
✎
13:59
|
Пробовал через postman, указал метод post, тоже ошибка, написал программистам js они говорят, что postman запросы post конвертирует в GET и поэтому не работает.
|
|||
11
Donkey_hot
27.12.23
✎
14:00
|
(8) Отправить для обработки - это POST всегда. Попробуйте передать пустую структуру: {}.
Как проверяете, что ответ пустой? ПолучитьТелоКакСтроку()? |
|||
12
Donkey_hot
27.12.23
✎
14:01
|
(10) За Postman не скажу, но в SoapUI какой метод указал, такой и выполняется.
|
|||
13
Gera1t
27.12.23
✎
14:02
|
(8)
HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(ЗапросHTTP); HTTPОтвет.КодСостояния = 500 |
|||
14
Gera1t
27.12.23
✎
14:03
|
(8) Как я понял со стороны сайте, если что то не нравиться ответ всегда 500
|
|||
15
Gera1t
27.12.23
✎
14:03
|
(12) Попробую его скачать
|
|||
16
Donkey_hot
27.12.23
✎
14:04
|
(14) Это отлично, но зачастую (не всегда) можно получить чуть больше подробностей при помощи HTTPОтвет.ПолучитьТелоКакСтроку()
|
|||
17
Gera1t
27.12.23
✎
14:06
|
(16) пустая строка
|
|||
18
Donkey_hot
27.12.23
✎
14:07
|
(17) Это прискорбно.
|
|||
19
Gera1t
27.12.23
✎
14:08
|
Пробовал ПолучитьТелоКакПоток() тоже пусто
|
|||
20
Gera1t
27.12.23
✎
14:11
|
SoapUI тоже 500 выдает
|
|||
21
Gera1t
27.12.23
✎
14:11
|
HTTP/1.1 500 Internal Server Error
Server: nginx/1.14.1 Date: Wed, 27 Dec 2023 11:11:00 GMT Content-Type: application/json; charset=utf-8 Content-Length: 0 Connection: keep-alive X-Powered-By: PHP/7.4.30 Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate Pragma: no-cache Set-Cookie: PHPSESSID=55tabgekt8phoqr8c2a9npljuf; path=/ |
|||
22
Donkey_hot
27.12.23
✎
14:13
|
(21) Покажите скриншот тела в SoapUI (конфиденциальное можно замазать)
|
|||
23
Gera1t
27.12.23
✎
14:16
|
||||
24
Donkey_hot
27.12.23
✎
14:19
|
(23) Нет, ну так не пойдет... У вас тело запроса пустое. Это нижнее левое окно. Перенесите туда JSON. Параметр data, соответственно, удалить.
|
|||
25
Gera1t
27.12.23
✎
16:21
|
https://ibb.co/TBBjyQK
Вот так? |
|||
26
Gera1t
27.12.23
✎
16:28
|
||||
27
Donkey_hot
27.12.23
✎
16:30
|
(25) Полагаю в теле все-таки ожидается валидный JSON. Проще всего конечно взять документацию к сервису и почитать. Но если нужны варианты:
а) { action: "getAllContragents", secret: "08e09ac9dbc8e7a6205d1c0c82fdff1e", } б) {data: { action: "getAllContragents", secret: "08e09ac9dbc8e7a6205d1c0c82fdff1e", } } в) {action: "oneSActions", data: { action: "getAllContragents", secret: "08e09ac9dbc8e7a6205d1c0c82fdff1e", } } В случаях а) и б) избавьтесь только от параметра data (как на скриншоте), в случае в) - от обоих параметров. Если на какой-то из этих вариантов придет что-то отличное от 500, дальше будет проще. |
|||
28
Donkey_hot
27.12.23
✎
16:31
|
(26) multipart/form-data зря выставили, не думаю, что в этом направлении наше счастье.
|
|||
29
Gera1t
27.12.23
✎
16:37
|
Получилось.
ЗапросHTTP.Заголовки.Вставить("Content-type", "application/x-www-form-urlencoded"); вот такой заголовок нужно |
|||
30
Gera1t
27.12.23
✎
16:38
|
action=oneSActions&data=
{ "action": "getAllContragents", "secret": "08e09ac9dbc8e7a6205d1c0c82fdff1e" } вот такое тало запроса |
|||
31
Gera1t
27.12.23
✎
16:39
|
Большое спасибо за помощь!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |