AnsweredAssumed Answered

PHP POST requests with curl

Question asked by Matthew Libera on Nov 25, 2015
Latest reply on Nov 25, 2015 by Matthew Libera

Hi fellow devs,

 

I'm just starting out with development in Canvas, and while I've done a lot with basic web dev stuff over the years, I've never tried to utilize APIs as heavily as I'm trying to now.

 

My main language is PHP for now, and I'm running into some trouble scripting a POST request to Canvas using curl. I have scripted GET requests without a problem. But when I try to run a POST request, I see a 403 error (Forbidden) in the response. It looks something like this:

 

string(1384) "HTTP/1.1 403 Forbidden
Cache-Control: no-cache
Content-Type: application/json; charset=utf-8
Date: Wed, 25 Nov 2015 15:00:52 GMT
etc, etc, etc.
X-UA-Compatible: IE=Edge,chrome=1
Content-Length: 33
Connection: keep-alive
{"message":"No parameters given"}"

 

The same request works from the command line via curl. I've read that PHP doesn't always insert a valid user-agent, and so I tried setting it with curl_setopt()...no dice.

 

Is there something else I'm missing here? Basically my code is:

 

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $endpoint); // defined prior to this code
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_json); // fields array defined and prepped with json_encode() prior to this code

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'Content-Length: ' . strlen($fields_json),
    'Authorization: Bearer ' . $canvasCreds['apiKey']
));

$result = curl_exec($ch);

curl_close($ch);

 

I've tinkered with adding other curl options, but nothing so far has worked. This is where my limited experience with curl is getting in my way...

 

Thanks in advance for any assistance.

 

-- Matt

Outcomes