REST request data can't be read in 'put' method

前端 未结 2 1319
北荒
北荒 2020-12-18 00:11

I\'m trying to develop a RESTful API with PHP without using frameworks. While processing the request, the client data cannot be read using this: parse_str(file_get_con

相关标签:
2条回答
  • 2020-12-18 00:25

    Could it be that there's something wrong with the web server?

    Actually yes. After banging my head on this for a few hours, I found that the culprit for the missing data was this:

    Note: Prior to PHP 5.6, a stream opened with php://input could only be read once
    

    Another piece of code was accessing the php://input before my code, and on servers with php < 5.6, this caused the input to be lost.

    Only on PUT requests that is.

    0 讨论(0)
  • 2020-12-18 00:35

    The parse_str is used to parse a query string(in form arg1=xyz&arg2=abc) and not JSON. You need to use json_decode to parse JSON strings.

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

    Here is the code that works:

    $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 command:

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

    Response:

    array(2) {
      ["name"]=>
      string(1) "a"
      ["data"]=>
      string(5) "data1"
    }
    
    0 讨论(0)
提交回复
热议问题