如何使用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