0

I have to make an API. For this, I will receive the data from the mobile devices as JSON using POST. I have to work with this data and send the response back to the devices also as JSON. But I don't know how to take the data that I will receive. I have tried to make some tests using CURL to see how can I take this data but the $_POST is always empty. Can you please tell me how to send the data as JSON format to the API using CURL and how can I receive this data so I can work with it and send it back as response?

These are my test files:

curl.php:

    //set POST variables
    $url = 'http://test.dev/test.php';
    $data = array(
        'fname' => 'Test',
        'lname' => 'TestL',
        'test' => array(
            'first' => 'TestFirst',
            'second' => 'TestSecond'
        )
    );

    //open connection
    $ch = curl_init($url);

    $json_data = json_encode($data);

    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            'Content-Type: application/json',
            'Content-Length: ' . strlen($json_data))
    );

    // execute post
    $result = curl_exec($ch);

    echo $result;

    //close connection
    curl_close($ch);

test.php:

var_dump($_POST);

The response that I get is:

array(0) { }
3
  • file_get_contents('php://') to get json value from request body Commented Sep 9, 2014 at 6:26
  • I have tried to use file_get_contents but I got the following errors: file_get_contents(): Invalid php:// URL specified in... file_get_contents(php://): failed to open stream: operation failed in... Commented Sep 9, 2014 at 7:07
  • file_get_contents('php://') will fetch you the json data submitted to your page...I think you missed single quotes Commented Sep 9, 2014 at 7:48

1 Answer 1

1

You need to pass the POST data as a URL query string or as an array, the problem is you post data in JSON format, but PHP does not parse JSON automatically, so the $_POST array is empty. If you want it, you need do the parsing yourself in the test.php:

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

same questions: 1 2

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.