2017-09-08 32 views
-1

私は、SpotifyはAPIを使用して、ユーザーのライブラリにトラックを追加しようとしています、私はエラー400を取得しています、私はAlamofireでこの要求を試してみましたので、Spotify headerトークンのpostCountエラーを取得を開始しました。..ここSwift Spotify APIエラーコード405ライブラリに追加?

パートであります

func spotify_addToLibrary() 
{ 

    self.spotify_verifySession(completion:{ success , auth in 

     if !success 
     { 
      return 
     } 

     let postString     = "ids=[\"\(self.trackid)\"]" 
     let url: NSURL     = NSURL(string: "https://api.spotify.com/v1/me/tracks")! 
     var request      = URLRequest(url: url as URL) 
      request.cachePolicy   = .useProtocolCachePolicy 
      request.timeoutInterval  = 8000 
      request.addValue("application/x-www-form-urlencoded;charset=UTF-8", forHTTPHeaderField: "Content-Type") 
      request.addValue("application/json", forHTTPHeaderField: "Accept") 
      request.addValue("Bearer \(auth.session.accessToken!)", forHTTPHeaderField: "Authorization") 
      request.httpMethod = "post" 
      request.httpBody = postString.data(using: .utf8) 

     URLSession.shared.dataTask(with: request) {data, response, err in 

        if err == nil 
        { 
         print("Add to Library success \(String(describing: response))") 

        }else 
        { 
         print("Add to Library Error \(String(describing: err))") 
        } 

       }.resume() 
    }) 
} 

そして、これは、ログです:

Add to Library success Optional(<NSHTTPURLResponse: 0x174c25d80> { URL: https://api.spotify.com/v1/me/tracks } { status code: 405, headers { 
    "Access-Control-Allow-Origin" = "*"; 
    "Cache-Control" = "private, max-age=0"; 
    "Content-Length" = 0; 
    Date = "Fri, 08 Sep 2017 14:29:24 GMT"; 
    Server = nginx; 
    "access-control-allow-credentials" = true; 
    "access-control-allow-headers" = "Accept, Authorization, Origin, Content-Type"; 
    "access-control-allow-methods" = "GET, POST, OPTIONS, PUT, DELETE"; 
    "access-control-max-age" = 604800; 
    allow = "DELETE, GET, HEAD, OPTIONS, PUT"; 
} }) 

私はそこに何を見逃したのか?コードの

答えて

1

HTTPエラー405を使用して、特定のエンドポイントには有効ではありません、あなたのRESTリクエストでメソッドを使用しようとしていることを意味します。

あなたが楽しんでるのWeb APIのdocumentationをチェックすると、それは明らかに有効なHTTP動詞が/me/tracksエンドポイントに使用すると述べているが、次のとおりです。DELETEGETPUTPOSTは許可されていないため、エラーです。

だけrequest.httpMethod = "put"request.httpMethod = "post"を変更するとエラーが解決されなければなりません。

いくつかの一般的なアドバイス:ネイティブスウィフト同等物は、(NSURL代わりのURL)に存在し、変数と関数名の下、キャメルケース(spotify_addToLibraryspotifyAddToLibraryあるべき)であるスウィフトの命名規則に準拠する場合Foundation型を使用しないでください。 8000 のタイムアウト間隔も非常に非現実的であると思われます。

+0

私はuが、今私は、エラー400を取得しています、言ったことをやった:D – Jack

+0

あなたはまたあなたの要求のボディにJSONデータを送信していません。 StringをJSONに変換する方法を調べてください。 –

+0

はい、あなたは正しいです、今は正常に動作しています – Jack

関連する問題