Возможно, я не в себе, но я весь день пытался запустить команду 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 curl)
Должно быть что-то, что мне не хватает, потому что это кажется довольно простым, сообщение просто неправильно интерпретируется, если бы это было так, все было бы отлично.
Вот что я получаю:
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 Передача-кодирование: фрагментированное Тип содержимого: текст / html; кодировка = изо-8859-1 {"screencast": {"id": null, "subject": null, "body": null, "dataUrl": null, "dataMedium": null, "createdOn": null, "author": null}}
application/json
.Ответы:
Анализ Джордансом того, почему не заполнен массив $ _POST, верен. Однако вы можете использовать
просто получить тело http и обработать его самостоятельно. См. Потоки ввода / вывода PHP .
С точки зрения протокола это на самом деле более правильно, поскольку вы все равно не обрабатываете данные многостраничной формы http. Кроме того, при отправке запроса используйте application / json в качестве типа содержимого.
источник
Обычно параметр
-d
интерпретируется как закодированный в форме. Вам нужен-H
параметр:источник
Я считаю, что вы получаете пустой массив, потому что PHP ожидает, что опубликованные данные будут в формате строки запроса (ключ = значение & ключ1 = значение1).
Попробуйте изменить свой запрос на завивание на:
и посмотрите, поможет ли это кому-нибудь.
источник
-H "Content-Type: application/json"
меня не сработало.Вам нужно установить несколько дополнительных флагов, чтобы curl отправлял данные как JSON.
команда
флаги
-H
: настраиваемый заголовок, следующим аргументом должен быть заголовок-X
: настраиваемый HTTP-глагол, следующий аргумент должен быть глаголом-d
: отправляет следующий аргумент как данные в запросе HTTP POSTРесурсы
источник
Вы должны избегать таких кавычек:
источник