【问题标题】:POST JSON over CURL with basic authentication使用基本身份验证通过 CURL 发布 JSON
【发布时间】: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 对象有什么想法吗?

【问题讨论】:

    标签: json api http post curl


    【解决方案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 命令
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-05-13
        • 1970-01-01
        • 2017-09-18
        • 2014-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多