使用基本身份验证通过CURL POST JSON

30

我正在使用命令行中的Curl来调试我正在开发的一个小型Web API。该API需要基本身份验证和JSON对象作为输入(POST)。目前,这个基本身份验证已经可以正常工作:

curl -i --user validuser:70e12a10-83c7-11e0-9d78-0800200c9a65 http://example.com/api.php

但是我也想将一个JSON对象作为POST请求发送:

curl -i --user validuser:70e12a10-83c7-11e0-9d78-0800200c9a65 -X POST -d '{"person":{"name":"bob"}}' http://example.com/api.php

我使用上述命令时收到400 Bad Request响应,有任何想法如何在此POST请求中捆绑json对象吗?

3个回答

59

尝试以下方法:

curl -i --user validuser:70e12a10-83c7-11e0-9d78-0800200c9a65 -H "Content-Type: application/json" -H "Accept: application/json" -X POST -d '{"person":{"name":"bob"}}' http://mysite.com/api.php

我已从正文内容中移除了json=部分。

另外,这篇帖子可能会有所帮助:如何使用curl向PHP发送JSON


6
curl --request POST \
  --url http://host/api/content/ \
  --header 'authorization: Basic Esdfkjhsdft4934hdfksjdf'

1

不要使用

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

使用代替

$person = $_POST['person'];

如果你正在使用命令行中的curl,以下是想要POST JSON数据的语法:

curl -d 'person={"name":"bob"}'

1
从我阅读的各个主题线程中,file_get_contents("php://input") 似乎是检索 POST 请求原始正文的标准方式。 - 2bard
@LBNerdBard 定义“标准”。 - Luca Matteis
我应该说“最合理”的而不是“标准的”,因为我不是处理多部分表单数据,而是单个字符串实体。 - 2bard
如果这种方法可行,您能否生成相应的完整(基本身份验证)curl命令?我已将API更改为侦听$ _POST ['person']。这个问题不仅涉及如何接受JSON数据,还涉及如何构建完全经过身份验证的curl POST命令。 - 2bard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接