这个问题来自我的前一次。我想通过调用用法 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;实际上,文档并没有指出提供内容类型头是必要的。但是,如果没有标头,我就会得到消息。
错误的HTTP“内容-类型”标题:“application/x form-urlencoded”。期待一个“申请/json”,.
输入标题但不提供POST字段会产生另一个错误。
请求主体:无法将输入解码为JSON
仅仅提供一些虚拟的post数据,curl_setopt($ch,CURL_POSTFIELDS,json_encode(array('a'=>1)));并没有做任何改变这种情况的事情。我做错了什么?
发布于 2015-12-12 05:57:24
文档并不表示Content-Type头是预期的,因为这个端点不接受任何参数,因此不需要任何实体,因此没有可以通过Content-Type头描述的内容。下面是一个工作命令行curl示例,根据文档:
curl -X POST https://api.dropboxapi.com/2/users/get_space_usage \
--header "Authorization: Bearer <ACCESS_TOKEN>"在PHP中将其转换为curl将涉及确保PHP也不会发送Content-Type头。默认情况下,它显然会发送"application/x-www-form-urlencoded",但API不接受这一点。如果确实设置了"application/json",API将尝试将主体解释为“application/JSON”,但无法这样做,因为它不是有效的JSON,因此会失败。
显然,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;
?>https://stackoverflow.com/questions/34236552
复制相似问题