0

我想了解为什么我得到“请求的 URL 以 HTTP 代码 401 响应”。当我尝试使用访问令牌进行描述时。

奇怪的是,当我从用户那里获得 access_token (会话)之后,它工作得很好,但是当我存储令牌并稍后尝试启动相同的代码时,它会失败!

显然,令牌有问题,因为我可以在没有令牌的情况下访问 soundcloud 描述,但是如果我使用此方法: $soundcloud->setAccessToken($token); 在获取曲目数据之前,我无法再访问它们了...

这是代码:

require_once 'soundcloud/Soundcloud.php';
$soundcloud = new Services_Soundcloud(SOUNDCLOUD_CLIENT_ID, SOUNDCLOUD_CLIENT_SECRET, SOUNDCLOUD_REDIRECT_URI);
$soundcloud->setAccessToken($session_token);
try
{
    $track = json_decode($soundcloud->get('tracks/'.$media_id), true);
}
catch (Services_Soundcloud_Invalid_Http_Response_Code_Exception $e)
{
    exit($e->getMessage());
}
try
{
    $response = json_decode($soundcloud->put(
                                     'tracks/'.$media_id,
                                              'test',
                                               array(CURLOPT_HTTPHEADER => array('Content-Type: application/xml'))), true);
}
catch (Services_Soundcloud_Invalid_Http_Response_Code_Exception $e)
{
    exit($e->getMessage());
}

此代码在我刚获得令牌时有效,但如果我在几天后启动它就会失败......

感谢帮助 !

4

2 回答 2

1

在这个例子中 $session_token 来自哪里?根据您生成访问令牌的方式,会发生以下两种情况之一:

  1. 您没有发送正确的访问令牌。
  2. 您发送的访问令牌已过期。

如果是 2,那么当用户授权您的应用时,您应该已经获得了一个刷新令牌。PHP SoundCloud SDK 有一个 accessTokenRefresh() 方法,您可以在此场景中使用该方法。

于 2012-04-24T23:34:40.807 回答
1

您需要一个不会过期的令牌。

授权时,参数scope默认为"*".

指定范围并检索令牌,如下所示:

$soundcloud->getAuthorizeUrl(array('scope'=>'non-expiring'))

请参阅:http: //developers.soundcloud.com/docs/api/reference#connect

(很老的问题,但我自己也遇到过这个问题。当令牌过期时,除了 401 错误之外,您不会从 API 获得反馈,让您一无所知。)

于 2014-04-01T19:27:28.470 回答