Ríomhaire
Ríomhaire

Reputation: 3124

CURL PHP POST interferes with JSON

I currently have an API script that returns JSON. It has worked up until I tried to add in a curl php POST script before it. The curl script is working on it's own, and it is also working in the API script. However the JSON code is not being returned.

Is there something fundamentally wrong with this approach below?

Thanks in advance.

EDIT: The curl script works 100% on its own. Said script is also working inside the below, it's just that the JSON does not return.

$name   = "foo";
$age    = "bar";

//set POST variables
$url = 'https://www.example.com';

$fields = array(
            'name' => urlencode($name),
            'age' => urlencode($age)
        );

//url-ify the data for the POST
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string, '&');

//open connection
$ch = curl_init();

//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);

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

//close connection
curl_close($ch);    
return json_encode(
    array(
        "status" => 1,
        "message" => "Success!",
        "request" => 10
    )
);

Upvotes: 0

Views: 422

Answers (1)

Baba
Baba

Reputation: 95101

You need to do the following use echo and also use CURLOPT_RETURNTRANSFER if not the output would be transferred directly to the page instead of $result

$name = "foo";
$age = "bar";
$url = 'http://.../a.php';
$fields = array('name' => urlencode($name),'age' => urlencode($age));
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
$result = curl_exec($ch);
curl_close($ch);

header('Content-type: application/json'); 
echo json_encode(array("status" => 1,"message" => "Success!","request" => 10));

Upvotes: 2

Related Questions