alibek Опубликовано 13 сентября, 2022 · Жалоба Столкнулся с загадочным глюком. Может кто тоже сталкивался? Есть Макроскоп Ультра версии 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 все заголовки только автоматические, дополнительных нет. Какой-либо значимой разницы я не замечаю. ТП тоже разницы не видит, но сваливает все на ошибки скрипта. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alibek Опубликовано 13 сентября, 2022 · Жалоба А вот заголовки, которые отправляет 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 — все так же. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alibek Опубликовано 13 сентября, 2022 · Жалоба Вот еще рабочий вариант для командной строки: 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 Разницы между нерабочим вариантом (скрипт) и рабочим я не вижу. В чем может быть разница? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alibek Опубликовано 14 сентября, 2022 · Жалоба Интересный глюк. У меня запрос подготавливался так: curl_setopt($this->curl, CURLOPT_PUT, true); Переделал так: curl_setopt($this->curl, CURLOPT_CUSTOMREQUEST, "PUT"); Теперь работает. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
dr Tr0jan Опубликовано 9 октября, 2022 · Жалоба On 9/14/2022 at 3:05 PM, alibek said: CURLOPT_PUT This option is deprecated since version 7.12.1. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...