如何使用 curl 将 JSON 发布到 PHP

2022-08-30 07:25:27

我可能离基础很远,但我整个下午都在尝试在这个嵌入式PHP框架教程中运行curl post命令。我不明白的是PHP应该如何解释我的POST,它总是作为一个空数组出现。

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

(那里的斜杠只是为了让我看起来不像一个白痴,但我使用PHP 5.2从Windows执行了这个,也在Linux服务器上尝试过,与Linux curl的版本相同)

一定有些东西我错过了,因为它看起来很简单,帖子只是没有被正确解释,如果是,一切都会很好。

这是我得到的:

HTTP/1.1 409 Conflict
Date: Fri, 01 May 2009 22:03:00 GMT
Server: Apache/2.2.8 (Win32) PHP/5.2.6
X-Powered-By: PHP/5.2.6
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-8859-1

{"screencast":{"id":null,"subject":null,"body":null,
         "dataUrl":null,"dataMedium":null,"createdOn":null,"author":null}}

答案 1

通常,该参数被解释为表单编码。您需要以下参数:-d-H

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

答案 2

乔丹对为什么没有填充_POST数组的分析是正确的。但是,您可以使用

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

只需检索 http 正文并自行处理即可。请参阅 PHP 输入/输出流

从协议的角度来看,这实际上更正确,因为无论如何你都没有真正处理http多部分表单数据。此外,在发布请求时使用 application/json 作为内容类型。


推荐