推特 API 实验室使用 CURL php - 未经授权

twitter API labs using by CURL php - Unauthorized

当我在命令行中执行它时它工作正常:

$ curl -H "Authorization: Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"  "https://api.twitter.com/labs/2/users/by?usernames=hikaru__1201&user.fields=created_at"

结果:

{"data":[{"created_at":"2016-09-28T07:02:32.000Z","id":"781026287825645573","name":"ろぐあうと","username":"hikaru__1201"}]}

但在php中不起作用:

$url = "https://api.twitter.com/labs/2/users/by?usernames=hikaru__1201&user.fields=created_at";
$authorization = 'Authorization: Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"';

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json' , $authorization ));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$result = curl_exec($ch);
curl_close($ch);
var_dump(json_decode($result)); die();

结果:

class stdClass#1 (4) {
  public $title =>
  string(12) "Unauthorized"
  public $type =>
  string(11) "about:blank"
  public $status =>
  int(401)
  public $detail =>
  string(12) "Unauthorized"
}

exec 也有效:

$command = 'curl -H "Authorization: Bearer xxxxxxxxxxxxxxx"  "https://api.
twitter.com/labs/2/users/by?usernames=hikaru__1201&user.fields=created_at"';

exec("$command 2>&1", $output);
var_dump($output); die();

结果:

 ...
       [3] =>
        string(129) "{"data":[{"created_at":"2016-09-28T07:02:32.000Z","id":"781026287825645573","name":"ろぐあうと","username":"hikaru__1201"}]}"

我尝试了这个 post 的答案,但没有成功

您的令牌末尾还有一个额外的双引号。

$authorization = 'Authorization: Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"';
                                                                               ^>

您可以 运行 启用详细 (curl_setopt($ch, CURLOPT_VERBOSE, 1);) 的 curl,它会向您显示它发送到服务器的请求。

示例请求 header 您可以看到它用于调试目的。

> GET / HTTP/1.1
Host: test.com
Accept: */*
Content-Type: application/json
Authorization: Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" <--extra quote