我正在构建一个使用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" );
答案 0 :(得分:1)
您应该在一个请求中获取多个曲目。 https://developer.spotify.com/web-api/get-several-tracks/
它不会帮助您解决速率受限时遇到的问题,但速度会更快,可能会阻止您限速。