Я могу быть в стороне от базы, но я весь день пытался запустить команду 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 -i -X POST -d '{\"screencast\":{\"subject\":\"tools\"}}' \ http://localhost:3570/index.php/trainingServer/screencast.json