php-curl 重定向后不发送授权标头

问题描述 投票:0回答:1

我正在使用 PHP 7.2 和 cURL 7.53.1。 我正在尝试使用 Google 的 NEST REST API。

我尝试这样的 CURL 请求:

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://developer-api.nest.com",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_FOLLOWLOCATION=>true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => array(
    "Content-Type: application/json",
    "Authorization: Bearer ".$authkey,
  ),
  CURLINFO_HEADER_OUT=>true
));

$response = curl_exec($curl);
var_dump($response);
var_dump(curl_getinfo($curl, CURLINFO_HEADER_OUT));

我看到了这个:

string(181) "{"error":"unauthorized","type":"https://developer.nest.com/documentation/cloud/error-messages#auth-error","message":"unauthorized","instance":"63d53235-5548-4d4f-b791-360c53baef4a"}"
string(165) "GET / HTTP/1.1
Host: firebase-apiserver14-tah01-iad01.dapi.production.nest.com:9553
Accept: */*
Accept-Encoding: deflate, gzip
Content-Type: application/json

"

似乎对developer-api.nest.com的请求已被重定向到firebase-apiserver14-tah01-iad01.dapi.production.nest.com:9553。 好的...但是在后续请求中,cURL 不会发送授权标头。 奇怪的是,它正在发送 Content-type 标头...

请求失败,因为未经授权。

任何帮助表示赞赏。 干杯

php curl php-curl smart-device nest-device-access
1个回答
0
投票

我们也遇到了类似的问题,Curl 没有将 Bearer token 传递到重定向中的下一个 URL。

我们通过添加参数解决了问题

curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, true);

您的情况:

...
CURLOPT_UNRESTRICTED_AUTH => true,
...
© www.soinside.com 2019 - 2024. All rights reserved.