Как разместить JSON на PHP с завитой

Я могу быть в стороне от базы, но я весь день пытался запустить команду curl post в этом уроке PHP. Я не понимаю, как PHP должен интерпретировать мой POST, он всегда появляется как пустой массив.

curl -i -X POST -d '{"screencast":{"subject":"tools"}}' \ http://localhost:3570/index.php/trainingServer/screencast.json 

(Слэш в том, чтобы заставить меня не выглядеть идиотом, но я выполнил это из окон с помощью PHP 5.2, также попробовал на сервере Linux, такую ​​же версию с завихрением Linux)

Должно быть, что-то мне не хватает, потому что это кажется довольно простым, пост просто не интерпретируется правильно, если бы это было так, все было бы отлично.

Это то, что я верну:

 HTTP / 1.1 409 Конфликт
 Дата: Пт, 01 Май 2009 22:03:00 GMT
 Сервер: Apache / 2.2.8 (Win32) PHP / 5.2.6
 X-Powered-By: PHP / 5.2.6
 Передача-кодирование: chunked
 Content-Type: text / html;  кодировка = изо-8859-1

 { "Скринкаст": { "ID": нулевой, "субъект": нулевой, "тело": нулевой,
          "DataUrl": нулевой, "dataMedium": нулевой, "createdOn": нулевой, "автор": NULL}}

Анализ Jordans, почему массив $ _POST не заполнен, является правильным. Однако вы можете использовать

 $data = file_get_contents("php://input"); 

просто восстановить тело http и обработать его самостоятельно. См. Потоки ввода / вывода PHP .

С точки зрения протокола это на самом деле более корректно, поскольку вы все равно не обрабатываете данные мультиплексора http. Кроме того, при отправке запроса используйте приложение / json в качестве типа содержимого.

Обычно параметр -d интерпретируется как закодированный формами. Вам нужен параметр -H :

 curl -v -H "Content-Type: application/json" -X POST -d '{"screencast":{"subject":"tools"}}' \ http://localhost:3570/index.php/trainingServer/screencast.json 

Я считаю, что вы получаете пустой массив, потому что PHP ожидает, что опубликованные данные будут в формате Querystring (key = value & key1 = value1).

Попробуйте изменить запрос на завивание:

 curl -i -X POST -d 'json={"screencast":{"subject":"tools"}}' \ http://localhost:3570/index.php/trainingServer/screencast.json 

и посмотреть, поможет ли это кому-либо.

Вам нужно установить несколько дополнительных флагов, чтобы завиток посылал данные как JSON.

команда

 $ curl -H "Content-Type: application/json" \ -X POST \ -d '{"JSON": "HERE"}' \ http://localhost:3000/api/url 

флаги

  • -H : пользовательский заголовок, ожидается, что следующий аргумент будет заголовком
  • -X : пользовательский HTTP-глагол, следующий аргумент, как ожидается, будет глаголом
  • -d : отправляет следующий аргумент как данные в запросе HTTP POST

Ресурсы

  • cURL manpage
  • Примеры cURL

Вам следует избегать цитат следующим образом:

 curl -i -X POST -d '{\"screencast\":{\"subject\":\"tools\"}}' \ http://localhost:3570/index.php/trainingServer/screencast.json