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

Posted

技术标签:

【中文标题】使用基本身份验证通过 CURL 发布 JSON【英文标题】:POST JSON over CURL with basic authentication 【发布时间】:2011-08-31 20:11:06 【问题描述】:

我正在使用命令行中的 Curl 来调试我正在处理的小型 Web api。 Web 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 对象有什么想法吗?

【问题讨论】:

【参考方案1】:
curl --request POST \
  --url http://host/api/content/ \
  --header 'authorization: Basic Esdfkjhsdft4934hdfksjdf'

【讨论】:

【参考方案2】:

试试看:

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= 位。

或者,这篇文章可能会有所帮助:How to post JSON to PHP with curl

【讨论】:

【参考方案3】:

不要使用

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

改为使用

$person = $_POST['person'];

如果你在命令行中使用 curl,这就是想要 POST json 数据的语法:

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

【讨论】:

从我读过的关于这个主题的各种线程来看,file_get_contents("php://input") 似乎是检索 post 请求的原始正文的标准方法。 @LBNerdBard 定义“标准”。 我应该说“最明智”而不是“标准”,因为我处理的不是多部分表单数据,而是单个字符串实体 如果此方法可行,您能否生成与其对应的完整(基本认证)curl 命令,我已更改 api 以侦听 $_POST['person'] - 这个问题不只是如何接受 JSON 数据,但如何构造完全认证的 curl POST 命令

以上是关于使用基本身份验证通过 CURL 发布 JSON的主要内容,如果未能解决你的问题,请参考以下文章

PHP cURL - 具有基本身份验证的HTTP GET 403

HTTP 基本身份验证 - 预期的 Web 浏览器体验是啥?

使用 JSON 进行基本身份验证

Wildfly 8 基本身份验证

向 JIRA 进行身份验证时出现 curl 错误

Grails Spring 安全插件 AJAX 身份验证