Sometimes, you’ll come across web services and APIs that will require you to send JSON via a POST request.
<?php //API Url $url = 'http://example.com/api/JSON/create'; //Initiate cURL. $ch = curl_init($url); //The JSON data. $jsonData = array( 'username' => 'MyUsername', 'password' => 'MyPassword' ); //Encode the array into JSON. $jsonDataEncoded = json_encode($jsonData); //Tell cURL that we want to send a POST request. curl_setopt($ch, CURLOPT_POST, 1); //Attach our encoded JSON string to the POST fields. curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonDataEncoded); //Set the content type to application/json curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); //Execute the request $result = curl_exec($ch);
Step by step explanation of the above code:
- We setup the URL that we want to send our JSON to.
- We initiated cURL using curl_init.
- We setup a PHP array containing sample data.
- We encoded our PHP array into a JSON string by using the function json_encode.
- We specified that we were sending a POST request by setting the CURLOPT_POST option to 1.
- We attached our JSON data using the CURLOPT_POSTFIELDS option.
- We set the content-type of our request to application/json using the CURLOPT_HTTPHEADER option. It is extremely important to note that you should always use “application/json”, not “text/json”. Simply put, using “text/json” is incorrect!
- Finally, we used the function curl_exec to execute our POST request. If you want to check for errors at this stage, then you should check out my article on error handling with cURL.
As you can see, it’s not much different than sending a regular POST request. In fact, it’s actually pretty simple.