使用基本身份验证通过 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