Подтвердить что ты не робот

Как мне получить доступ к данным PEST API PEST API на стороне сервера?

- Вопрос -

Я только начинаю с REST API и довольно запутался.

Это то, на что похожа моя клиентская часть PHP cRUL для PUT.

case 'PUT':
    curl_setopt($handle, CURLOPT_CUSTOMREQUEST, 'PUT');
    curl_setopt($handle, CURLOPT_POSTFIELDS, $data);
    break;

Теперь, когда я смотрю на сервер, мой $_SERVER ['REQUEST_METHOD'] показывает PUT, но мой вопрос заключается в том, как я могу получить $data, отправленные с помощью CURLOPT_POSTFIELDS.

Все, что мне нужно сделать, это получить $data, отправленные с запросом PUT в следующую строку. Как

$value = $data['curl_data'];

Я видел столько помех по этой теме, что это дает мне головную боль. Кажется, это так просто на стороне клиента php, но никто не имеет ответов, которые работают на стороне сервера php.

Спасибо за любую помощь!

- ответ (после справки и домашней работы) -

Я новичок, поэтому не могу ответить на свой вопрос до 8 часов... нечетно:)

Хорошо, после работы с великими людьми здесь я должен сказать, что мы столкнулись с ответом. Я пинаю себя за то, что это так просто, в то же время это было запутанно.

curl_setopt($handle, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($handle, CURLOPT_POSTFIELDS, http_build_query($data));

Первое изменение (выше) мне пришлось добавить http_build_query() вокруг $data. Это взяло мои данные из массива в дружественную строку.

Затем мне пришлось добавить.

parse_str(file_get_contents('php://input'), $put);

Теперь я могу делать такие вещи, как $put ['data'].

Ответ PaulPRO, приведенный выше, действительно работает, чтобы получить данные так же, как и file_get_contents() с меньшим количеством строк. Мы застряли, пытаясь понять, как анализировать данные, в которых моя нехватка http_build_query(), которую я видел на другом сайте, играла в игру.

Так вот как все это работает.

  • Данные помещаются в нормальный массив.
  • http_build_query() преобразует его в красивую почти GET-строку.
  • file_get_contents() переносит его с клиента на сервер.
  • parse_str() затем возвращает его обратно в массив.

Я вижу много сообщений об использовании PUT для отправки файлов. Я вижу, как это будет работать, но из того, что я прочитал во всем этом процессе REST, было то, что PUT должен обновлять данные, поскольку post - это создание данных. Может быть, я ошибаюсь. Я что-то пропустил?

4b9b3361

Ответ 1

Из Руководство по PHP:

Данные PUT поступают из stdin:

$putdatafp = fopen("php://input", "r");

Пример использования:

$putfp = fopen('php://input', 'r');
$putdata = '';
while($data = fread($putfp, 1024))
    $putdata .= $data;
fclose($putfp);

Ответ 2

У меня тот же сценарий, в котором нужно отправить данные на сервер PHP через ReST API с помощью метода PUT. Я попытался почти пару часов найти решение, но, наконец, нашел способ:

В CUrl:

$postData = http_build_query($data);
curl_setopt($ch, CURLOPT_POSTFIELDS,$postData); 

Мы должны проанализировать данные в переменной let say: $putData,   Здесь процедура Parse String:

parse_str(file_get_contents("php://input"),$putData); 

Затем напечатайте $putData, получите тот же массив, который вы публикуете в curl..