2015-12-12 5 views
0

Этот вопрос следует из моего previous one. Я думал, что выполнил бы базовую токен-аутентификацию, вызвав функцию API get_space_usage. Я попыталсяПроверка токена Dropbox API

$headers = array("Authorization: Bearer token", 
       "Content-Type:application/json"); 
$ch = curl_init('https://api.dropboxapi.com/2/users/get_space_usage/'); 
curl_setopt($ch,CURLOPT_HTTPHEADER,$headers); 
curl_setopt($ch,CURLOPT_POST,true); 
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); 
$response = curl_exec($ch); 

curl_close($ch); 
echo $response; 

документация фактически не указывают, что необходимо обеспечить заголовок Content-Type. Однако без этого заголовка я получаю сообщение

Плохой HTTP-заголовок «Content-Type»: «application/x-www-form-urlencoded». Ожидая один из "приложения/JSON", ...

Собираем в этом заголовке, но не поставляет и не POST полей создает другую ошибку

тело запроса: не может декодировать входные данные как JSON

Просто предоставление некоторых данных фиктивного сообщения curl_setopt($ch,CURL_POSTFIELDS,json_encode(array('a'=>1))); не делает ничего, чтобы исправить ситуацию. Что я делаю не так?

ответ

2

The documentation не указывает, что заголовок Content-Type ожидается, потому что, так как эта конечная точка не принимает никаких параметров, ни один орган не ожидается, и поэтому нет никакого контента, чтобы описать через Content-Type заголовок. Вот рабочая командная строка локон пример, согласно документации:

curl -X POST https://api.dropboxapi.com/2/users/get_space_usage \ 
    --header "Authorization: Bearer <ACCESS_TOKEN>" 

Переводя это свернуться в PHP будет включать в себя убедившись, что PHP также не посылает вверх Content-Type заголовок. По умолчанию, хотя, по-видимому, он отправляет «application/x-www-form-urlencoded», но API API не принят. Если вы установите «application/json», API попытается интерпретировать тело как таковое, но не сможет этого сделать, поскольку он недействителен JSON и, соответственно, терпит неудачу.

Это, по-видимому, нелегко (возможно, не возможно) до omit the Content-Type header with curl in PHP, поэтому альтернативой является установка «application/json», но введите действительный JSON, такой как «null». Вот модифицированная версия вашего кода, которая делает так:

<?php 

$headers = array("Authorization: Bearer <ACCESS_TOKEN>", 
       "Content-Type: application/json"); 

$ch = curl_init('https://api.dropboxapi.com/2/users/get_space_usage'); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, "null"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$response = curl_exec($ch); 

curl_close($ch); 
echo $response; 

?> 
Смежные вопросы