【发布时间】:2015-01-15 16:09:09
【问题描述】:
我目前正在尝试使用 Nest API,但无法通过授权部分。 这是我用来调用 API 的 PHP 代码:
//access token url used for authorization
$url="https://api.home.nest.com/oauth2/access_token?code=".$_GET['pin']."&client_id=".$api_key."&client_secret=".$secret_key."&grant_type=authorization_code";
$ch = curl_init ($url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
//https
curl_setopt($ch, CURLOPT_SSLVERSION,1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST,true);
//to have headers in response
curl_setopt($ch, CURLOPT_HEADER, 1);
$result = curl_exec ($ch);
if($result){
echo "Result : " .$result;
}else{
echo curl_error($ch);
}
我得到了这个调用的以下结果:
Result : HTTP/1.1 200 Connection established HTTP/1.1 400 BAD_REQUEST Content-Length: 0 Connection: Close
是否需要设置其他选项才能使其正常工作?
编辑:生成的 url ($url) 与 HTTPRequester (Firefox 插件) 一起工作正常,所以问题肯定来自 curl 请求本身
提前致谢。
【问题讨论】:
-
"400 Bad Request 错误是一个 HTTP 状态代码,表示您发送到网站服务器的请求(例如加载网页的请求)格式不正确,因此服务器无法理解或处理请求。”
-
您将 CURLOPT_SSL_VERIFYPEER 设置为
false是否有特殊原因? (我不认为它与问题直接相关,但它让我很好奇。) -
还有——这是你的全部代码,还是以后有更多?您在问题中显示的 curl_error 回声下方是否有其他回声?你显然得到了 200 和 400 的回应,我有点不知所措。
-
@MattGibson 这几乎是所有代码:这里没有显示 api 密钥和秘密,但仅此而已。评论 CURLOPT_VERIFYPEER 或将其设置为
true会给我这个错误:SSL certificate problem: self signed certificate in certificate chain。 -
请注意,即使请求符合 HTTP 规范并且只是缺少 Nest API 所需的参数,Nest 也会返回 400 bad request;您仍然应该检查响应正文。