在Spotify api呼叫响应中访问标头

时间:2016-01-23 11:59:08

标签: angularjs http spotify

我正在构建一个使用Spotify api的应用。目前,用户可以粘贴曲目并获取每个曲目的信息。我的一个播放列表有500个曲目,因此浏览器可以快速连续拨打500个电话。这违反了api速率限制,我收到了这些标题的错误:

'nw-gyp' is not recognized as an internal or external command, operable program or batch file

我想要访问HTTP/1.1 429 Too Many Requests Server: nginx Date: Sat, 23 Jan 2016 11:47:52 GMT Transfer-Encoding: chunked Connection: keep-alive Keep-Alive: timeout=600 Retry-After: 7 Access-Control-Allow-Origin: * Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE Access-Control-Allow-Credentials: true Access-Control-Max-Age: 604800 Access-Control-Allow-Headers: Accept, Authorization, Origin, Content-Type Content-Encoding: gzip 标头,但在我的代码中,我使用角度Retry-After服务中的headers()函数,我得到一个空对象。我的代码看不到任何标题。

我在此处阅读的有关访问标题的所有问题都指向更改服务器返回的$http以允许客户端获取标头。由于我无法控制Spotify服务器,因此我显然无法改变它。

查看上面的标题似乎我永远无法访问Access-Control-Expose-Headers标头,因为它未包含在Retry-After列表中。

我有什么办法可以访问此标题吗?我确实看到了有关更改Access-Control-Allow-Headers服务中默认值的内容,但我似乎无法使其工作。

如果它与我的请求标题相关:

$httpProvider

我的请求如下:

GET /v1/tracks/1KsI8NEeAna8ZIdojI3FiT HTTP/1.1
Host: api.spotify.com
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Accept: application/json, text/plain, */*
Origin: http://localhost:63342
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36
Referer: http://localhost:63342/SpotifyExportTool/index.html
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6

header var始终是一个空对象。这里的错误是一个详细的here的响应对象。

我已设法在Js bin中重新创建此内容。这不使用角度代码或XMLHttpRequest以外的任何东西:

return Rx.Observable.fromPromise<IHttpPromiseCallbackArg<ITrackDetails>>(this.$http.get( `https://api.spotify.com/v1/tracks/${trackId}` ))
    .retry(3)
    .catch( (error) => {
        var headers: any = error.headers();
        return Rx.Observable.throw<ITrackDetails>( <ITrackError>{ id: trackId, error: error } );
    } )
    .pluck<ITrackDetails>( "data" );

我仍然没有在错误响应的标头中得到任何内容。您可以在下面看到成功请求的输出,然后是错误输出: enter image description here

1 个答案:

答案 0 :(得分:1)

您应该在一个请求中获取多个曲目。 https://developer.spotify.com/web-api/get-several-tracks/

它不会帮助您解决速率受限时遇到的问题,但速度会更快,可能会阻止您限速。