我想了解为什么我得到“请求的URL以HTTP代码401响应”。当我尝试用访问令牌进行描述时。
奇怪的是,当我从用户那里获得access_token(session)之后我就这样做了,但是当我存储令牌并尝试稍后启动相同的代码时,它会失败!
显然,令牌存在问题,因为我可以在没有令牌的情况下访问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());
}
此代码在我刚获得令牌时有效,但如果我几天后启动它就会失败...
感谢您的帮助!
答案 0 :(得分:1)
此示例中来自$ session_token的位置是什么?根据您生成访问令牌的方式,发生以下两种情况之一:
如果是2,那么当用户授权您的应用时,您应该获得刷新令牌。 PHP SoundCloud SDK有一个accessTokenRefresh()方法,您可以在此方案中使用该方法。
答案 1 :(得分:1)
您需要一个非过期令牌。
授权时,参数scope
默认为"*"
。
指定范围并检索令牌,如下所示:
$soundcloud->getAuthorizeUrl(array('scope'=>'non-expiring'))
请参阅:http://developers.soundcloud.com/docs/api/reference#connect
(很老的问题,但是我自己也遇到了这个问题。当令牌过期时,你没有得到API的反馈,然后401错误,让你陷入黑暗。)