1

I am using a CURL post to an existing API. The API returns the error content must be JSON or plain text. I json_encode data and post the encoded data to the API.

In the API, it says the Content-Type should be application/x-www-form-urlencoded'.

However, it still returns the error content must be JSON or plain text. What could be the issue with my code below after submitting my data in JSON format?

This is a sample request body in the API doc.

"item" : "Store", "content" : { "channel":"false", "hop": "false", "msg": "Order successfully placed." } 

Controller

 public function postUrl() { $url = "https://api.com/"; $data = array("item" => "Nike Shoes","content" => array ("channel" => "false" ,"hop" => "false","msg" => "Item Sold")); $postdata = json_encode($data); $ch = curl_init(); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded')); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata); $result = curl_exec($ch); curl_close($ch); Log::info($postdata); } 

1 Answer 1

1

Perhaps this is because boolean values are specified as strings.

public function postUrl() { $url = 'https://api.com/'; $data = [ 'item' => 'Nike Shoes', 'content' => [ 'channel' => false, 'hop' => false, 'msg' => 'Item Sold' ] ]; $postData = json_encode($data); $ch = curl_init(); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); $result = curl_exec($ch); curl_close($ch); Log::info($postData); } 

Also try this

public function postUrl() { $url = 'https://api.com/'; $data = [ 'item' => 'Nike Shoes', 'content' => [ 'channel' => 'false', 'hop' => 'false', 'msg' => 'Item Sold' ] ]; $postData = json_encode($data); $ch = curl_init(); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: text/json']); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); $result = curl_exec($ch); curl_close($ch); Log::info($postData); } 
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.