Перейти к содержимому
Калькуляторы

Macroscop REST API - ошибка при выполнении PUT-запроса

Столкнулся с загадочным глюком.

Может кто тоже сталкивался?

 

Есть Макроскоп Ультра версии 3.5.

Делаю скрипт, который будет управлять пользователями.

Скрипт на PHP, используется библиотека curl, для сериализации используется json.

 

Запросы на получение данных (GET), добавление нового пользователя (POST), удаление пользователя (DELETE) выполняются успешно.

Запрос на изменение пользователя (PUT) не выполняется, прерывается по таймауту. В серверных логах есть исключение, но по логам понять его причину не получается.

 

Скрипт выполняет PUT-запрос к ресурсу /configure/users и передает в него следующую строку:

[{"Id":"344db01a-4884-4f27-9bd1-ad3d4d0f9e80","Login":"tmp2"}]

Это строка уже после сериализации (переменная $data из строчки curl_setopt($this->curl, CURLOPT_POSTFIELDS, $data)).

В ответ тишина, затем таймаут и ошибка "Recv failure: Connection reset by peer".

Но если эту же строчку скопировать в буфер и подставить в такой же запрос в Postman — запрос выполняется успешно.

 

Скрипт при выполнении запроса задает только заголовок Authorization и Content-Type (ну и то, что curl сам добавляет).

В Postman все заголовки только автоматические, дополнительных нет.

821633617_remmina_work-backup_192_168.1.30_2022913-82539557173.thumb.png.c0b153f2051b18d192b75ae61d7158b7.png

 

Какой-либо значимой разницы я не замечаю.

ТП тоже разницы не видит, но сваливает все на ошибки скрипта.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А вот заголовки, которые отправляет curl:

> PUT /configure/users HTTP/1.1
Host: xx.xx.xx.40:8080
Accept: */*
Authorization: xxxxxxxxxxxxxxxxx
Content-Type: application/json; charset=utf-8
Content-Length: 62
Expect: 100-continue

Дело не в Expect; вручную убирал его в скрипте, добавлял в Postman — все так же.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вот еще рабочий вариант для командной строки:

curl -v --location --request PUT 'xxxx/configure/users' \
--header 'Authorization: xxxx' \
--header 'Content-Type: application/json' \
--header 'Expect: 100-continue' \
--header 'User-Agent:' \
--data-raw '[{"Id":"344db01a-4884-4f27-9bd1-ad3d4d0f9e80","Login":"tmp2"}]'

И результат:

*   Trying xxxx...
* TCP_NODELAY set
* Connected to xxxx port 8080 (#0)
> PUT /configure/users HTTP/1.1
> Host: xxxx
> Accept: */*
> Authorization: xxxx
> Content-Type: application/json
> Expect: 100-continue
> Content-Length: 62
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 100 Continue
* We are completely uploaded and fine
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Content-Length: 2
< Content-Type: text/json
< Server: Microsoft-HTTPAPI/2.0
< Date: Tue, 13 Sep 2022 09:10:29 GMT
< 
* Connection #0 to host xxxx left intact

Разницы между нерабочим вариантом (скрипт) и рабочим я не вижу.

В чем может быть разница?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Интересный глюк.

У меня запрос подготавливался так:

curl_setopt($this->curl, CURLOPT_PUT, true);

Переделал так:

curl_setopt($this->curl, CURLOPT_CUSTOMREQUEST, "PUT");

Теперь работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

On 9/14/2022 at 3:05 PM, alibek said:
CURLOPT_PUT

This option is deprecated since version 7.12.1.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.