推特 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
当我在命令行中执行它时它工作正常:
$ 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