Как получить $ _GET [‘access_token’] с URL с #

https://accounts.spotify.com/authorize?client_id=6af26783dff4466fa5cbcce0f042aba7&redirect_uri=http://bon-deals.com/School/Collegas/Heartify/callback&scope=user-read-private+user-read-email&response_type=token

При нажатии на вышеуказанную ссылку Spotify API ответит следующей примерной ссылкой:

http://bon-deals.com/School/Collegas/Heartify/callback#access_token=BQALr_8ac05PFDIo43oPddsSJafQNXn2nEgqR0FJALJov8dJktgrSzRoAYCGijlXyLVOZYHryhvj7TXsTh6wc3ntVrOMx36HscqS_pA9b6978bMjIP9U6IWSu-aErTRwc2rScM4Y7iJtpKRsid0MGMCLq3tPvCQ&token_type=Bearer&expires_in=3600

Я не могу успеть $_GET['access_token'] из-за # до access_token в URL.

Мы также попытались получить токен доступа, изменив response_type=code а затем передать код для доступа к токену с помощью метода cURL POST, но он также не работает.

-1

Решение

Вы не можете получить доступ к так называемому фрагменту URL-адреса на стороне сервера, потому что фрагментная часть предназначена только для пользовательского агента (то есть для браузера). Запрашиваемый тип ответа token указывает, что вызывающая сторона хочет, чтобы токен был доставлен во фрагменте, поскольку это клиент в браузере или собственное приложение.

Если вы хотите, чтобы токен был доставлен на серверную часть, вам нужно использовать другой тип ответа, например, response_type=code, Затем вы можете обменять code для access_token через вызов к конечной точке токена Spotify.

Если это не работает для вас, это будет другой вопрос, включая описание ошибок / журналы и т. Д.

0

Другие решения

Вы правильно сделали скручивание?

Какой ответ вы получили?

Вы проверяли заголовок ответа HTTP?

Когда @hans Z сказал «потому что фрагмент фрагмента предназначен только для пользовательского агента (то есть браузера)», это не так.

Часто проблема заключается в заголовке запроса. Приведенный ниже код curl расскажет о каждой детали, которую может получить любой пользовательский агент. Вам просто нужно правильно настроить заголовок запроса. Вы, вероятно, удалите Cookie:

Если вам нужно сделать сообщение, то добавьте:

$post = 'key1=value1&key2=value2&key3=value3';
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);

PHP

$request = array();
$request[] = 'Host: xxxxxxx';
$request[] = 'User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:39.0) Gecko/20100101 Firefox/39.0';
$request[] = 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
$request[] = 'Accept-Language: en-US,en;q=0.5';
$request[] = 'Accept-Encoding: gzip, deflate';
$request[] = 'DNT: 1';
$request[] = 'Cookie: xxxx
$request[] = 'Connection: keep-alive';
$request[] = 'Pragma: no-cache';
$request[] = 'Cache-Control: no-cache';
$url = 'https://xxxx.com/';
$ch = curl_init($url);

curl_setopt($ch, CURLOPT_ENCODING,"");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_FILETIME, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 100);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_TIMEOUT,100);
curl_setopt($ch, CURLOPT_FAILONERROR,true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $request);

$data = curl_exec($ch);
if (curl_errno($ch)){
$data .= 'Retreive Base Page Error: ' . curl_error($ch);
}
else {
$skip = intval(curl_getinfo($ch, CURLINFO_HEADER_SIZE));
$responseHeader = substr($data,0,$skip);
$data= substr($data,$skip);
$info = curl_getinfo($ch);
$info = var_export($info,true);
}
echo $responseHeader . $info . $data;
0