【问题标题】:400 BAD REQUEST when using Nest API for Authorization使用 Nest API 进行授权时出现 400 BAD REQUEST
【发布时间】: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;您仍然应该检查响应正文。

标签: php curl nest-api


【解决方案1】:

HTTP 状态码

  • 400 - 错误请求 - 通常发生在错误参数 给一个方法

所以,试试这个:

echo $url;
exit;

之前:

$ch = curl_init ($url);

然后将该网址复制粘贴到您的浏览器地址栏。查看您在哪里发布了错误的参数。

看看,如果这有帮助。

【讨论】:

  • 用生成的 url 尝试了使用 Firefox 扩展 HttpRequester 的请求(因为需要发布请求),我成功地收到了一个令牌。这意味着问题来自代码的 curl 部分,但是在哪里?
  • 添加这个: curl_setopt($ch, CURLOPT_VERBOSE, 1);到你的代码。访问curl.haxx.se/mail/curlphp-2008-03/0064.html。可能会告诉你失败的地方。
  • 添加此项不会提供任何其他信息。可能是因为调用没有 curl 错误(我有一个 200 代码,然后在响应标头中有一个 400)
【解决方案2】:

我认为 dev 和 inspect 在同一个端口上运行。所以通过设置“inspect”删除端口和主机以在节点上进行检查:false

angular.json

"serve": {
  "builder": "@nrwl/node:execute",
  "options": {
    "buildTarget": "api:build",
    "inspect": false
  }
},  

【讨论】:

    猜你喜欢
    • 2015-03-08
    • 2018-07-28
    • 1970-01-01
    • 1970-01-01
    • 2011-05-31
    • 2015-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多