如何使用curl将JSON发布到PHP

我可能会离开基地,但我一直在尝试整个下午在这个隐藏的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}}

Jordans分析为什么$ _POST数组未被填充是正确的。 但是,您可以使用

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

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

从协议的角度来看,这实际上是更正确的,因为无论如何你并没有真正处理http多部分表单数据。 另外,在发布请求时使用application / 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

看看是否有帮助。

链接地址: http://www.djcxy.com/p/8513.html

上一篇: How to post JSON to PHP with curl

下一篇: Posting JSON to REST API