php - 'put'方法无法读取REST请求数据

标签 php json api rest curl

我正在尝试在不使用框架的情况下使用 PHP 开发 RESTful API。在处理请求时,无法使用以下方法读取客户端数据:parse_str(file_get_contents("php://input"), $put_vars);

完整代码如下:

public static function processRequest() {

    //get the verb
    $method = strtolower($_SERVER['REQUEST_METHOD']);

    $request = new Request();

    $data = array();
    $put_vars = array();

    switch ($method) {
        case 'get':
            $data = $_GET;
            break;
        case 'post':
            $data = $_POST;
            break;
        case 'put':
            parse_str(file_get_contents("php://input"), $put_vars);
            $data = $put_vars;
            echo $data;
            break;
    }

    $request->setMethod($method);
    $request->setRequestVars($data);

    if (isset($data['data'])) {
        $request->setData(json_decode($data));
        echo 'data exists';
    }

    return $request;
}

我正在使用 cURL休息 API,当我键入此命令时:curl -i -X PUT -d '{"name":"a","data":"data1"}' http://localhost/my-rest-api/api/ 我只得到这个:

数组""

为什么没有返回正确的数据?

编辑

我也测试了another piece of code这应该是一个 API 并且 file_get_contents('php://input', true) 仍然返回 null。会不会是网络服务器出了问题?

最佳答案

parse_str用于解析查询字符串(格式为 arg1=xyz&arg2=abc)而不是 JSON。您需要使用 json_decode解析 JSON 字符串。

$data = json_decode(file_get_contents("php://input"), true);

这是有效的代码:

$method = strtolower($_SERVER['REQUEST_METHOD']);
$data = array();

switch ($method) {
    case 'get':
        $data = $_GET;
        break;
    case 'post':
        $data = $_POST;
        break;
    case 'put':
        $data = json_decode(file_get_contents("php://input"), true);
        break;
}

var_dump($data);

curl 命令:

curl -i -X PUT -d '{"name":"a","data":"data1"}' http://my-server/my.php

响应:

array(2) {
  ["name"]=>
  string(1) "a"
  ["data"]=>
  string(5) "data1"
}

关于php - 'put'方法无法读取REST请求数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19097145/

相关文章:

php - 遍历 PHP 数组中的所有项目和子项目

c# - RestSharp 没有正确反序列化 JSON

json - 具有不规则节点的分层 data.frame 到 JSON

javascript - 将 steam 应用列表加载为 JSON 文件

php - 当我登录时安装 phabricator 后出现空白页面

php - 如何安全抵御 XSS 攻击但允许 <br>

php - 如何使用 least-n-per-group 查询进行左连接?

android - 使用 Purchase Status API 验证 Google Play 收据,但总是收到 403 forbidden

java - 如何使用 Java 在 Android 中获取 Google 搜索结果?

api - 如何组织API?