How to post JSON to PHP with curl
我可能有点离谱,但我整个下午都在尝试在这个休息的PHP框架教程中运行curl-post命令。我不明白的是PHP应该如何解释我的文章,它总是作为一个空数组出现。
1 2 | curl -i -X POST -d '{"screencast":{"subject":"tools"}}' \ http://localhost:3570/index.php/trainingServer/screencast.json |
(这里的斜线只是为了让我看起来不像个白痴,但是我使用php 5.2从Windows执行了这个操作,也在Linux服务器上尝试过,与linux curl的版本相同)
一定有一些我遗漏了的东西,因为它看起来很简单,只是没有正确的解释,如果是的话,一切都会很好地工作。
这就是我得到的:
1 2 3 4 5 6 7 8 9 | 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 2 | curl -v -H"Content-Type: application/json" -X POST -d '{"screencast":{"subject":"tools"}}' \ http://localhost:3570/index.php/trainingServer/screencast.json |
。
Jordan对$_Post-Array未填充的原因的分析是正确的。但是,您可以使用
1 |
号
只需检索HTTP主体并自己处理它。请参见PHP输入/输出流。
从协议的角度来看,这实际上更正确,因为您实际上并没有真正处理HTTP多部分表单数据。另外,在发布请求时,使用application/json作为内容类型。
我相信您得到的是一个空数组,因为PHP希望发布的数据采用querystring格式(key=value&key1=value1)。
试着把你的卷发要求改为:
1 2 | curl -i -X POST -d 'json={"screencast":{"subject":"tools"}}' \ http://localhost:3570/index.php/trainingServer/screencast.json |
看看有没有帮助。
您需要设置一些额外的标志,以便curl将数据作为json发送。
命令1 2 3 4 | $ curl -H"Content-Type: application/json" \ -X POST \ -d '{"JSON":"HERE"}' \ http://localhost:3000/api/url |
旗帜
-H :自定义表头,下一个参数应为表头。-X :自定义HTTP动词,下一个参数应为动词-d :作为HTTP POST请求中的数据发送下一个参数
资源
- 卷曲手册页
- 卷曲示例
您应该这样转义引号:
1 2 | curl -i -X POST -d '{"screencast":{"subject":"tools"}}' \ http://localhost:3570/index.php/trainingServer/screencast.json |