如何使用curl将JSON发布到PHP

我可能会离开基地,但我一直在尝试整个下午在这个restPHP框架教程中运行curl post命令 。 我不明白的是PHP应该如何解释我的POST,它总是以一个空的数组的forms出现。

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

(在那里的斜线只是为了让我看起来不像一个白痴,但我使用PHP 5.2在windows上执行此操作,也尝试在Linux服务器上,与Linuxcurl相同的版本)

必须有一些我想念的东西,因为它看起来非常直截了当,但是这个post不能被正确地解释,如果是的话,一切都会很好。

这是我回来的:

 HTTP / 1.1 409冲突
date:2009年5月1日星期五22:03:00 GMT
服务器:Apache / 2.2.8(Win32)PHP / 5.2.6
 X-Powered-By:PHP / 5.2.6
传输编码:分块
 Content-Type:text / html; 字符集= ISO-8859-1

 { “抓屏”:{ “ID”:空, “主题”:空, “身体”:空,
          “dataUrl”:空, “dataMedium”:空, “createdOn”:空, “作者”:空}}

Jordans分析为什么$ _POST数组没有填充是正确的。 但是,你可以使用

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

只是检索http身体和自己处理它。 查看PHPinput/输出stream 。

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

通常,参数-d被解释为forms编码。 你需要-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请求:

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

看看是否有帮助

您需要设置一些额外的标志,以便curl以JSONforms发送数据。

命令

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

  • -H :自定义标题,下一个参数应该是标题
  • -X :自定义的HTTP动词,下一个参数预计是动词
  • -d :在HTTP POST请求中将下一个参数作为数据发送

资源

  • curl手册页
  • cURL的例子

你应该避免这样的引号:

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