2016-08-19 7 views
0

Я создаю приложение, которое регистрируется с учетными данными пользователя для Spotify. Я следую за этот API вызов: https://developer.spotify.com/web-api/authorization-guide/#client_credentials_flowПочему я продолжаю получать ошибку 400 после публикации в Android?

И это код implenentation:

@Override 
protected Session doInBackground(String... params) { 

    Session session = new Session(); 



    try { 
     String response = ""; 
     URL url = new URL(GET_TOKEN_URL); 
     HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); 

     String credentials = params[0]+":"+params[1]; 
     String basicAuth ="Basic "+new String(android.util.Base64.encode(credentials.getBytes(), Base64.DEFAULT)); 

     Uri.Builder builder = new Uri.Builder() 
       .appendQueryParameter(GRANT_TYPE, CLIENT_CREDENTIALS); 
     String query = builder.build().getEncodedQuery(); 
     httpURLConnection.setRequestProperty(AUTH, basicAuth); 
     httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
     httpURLConnection.setRequestProperty("Content-Language", "en-US"); 
     httpURLConnection.setDoInput(true); 
     httpURLConnection.setUseCaches(false); 
     httpURLConnection.setDoOutput(true); 
     httpURLConnection.setRequestMethod(POST); 


     httpURLConnection.connect(); 

     OutputStream os = httpURLConnection.getOutputStream(); 
     BufferedWriter writer = new BufferedWriter(
       new OutputStreamWriter(os, "UTF-8")); 

     writer.write(query); 
     writer.flush(); 
     writer.close(); 
     os.close(); 

     int responseCode=httpURLConnection.getResponseCode(); 

     session.setResponseCode(responseCode); 

     if (responseCode == HttpsURLConnection.HTTP_OK) { 
      String line; 
      BufferedReader br=new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream())); 
      while ((line=br.readLine()) != null) { 
       response+=line; 
      } 
     }else{ 
      Log.e(getClass().getSimpleName(), "RESPONSE:" + responseCode); 
      // response = "Something went wrong"; 
     } 
     Log.d(getClass().getSimpleName(), response); 

    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally{ 

    } 
    return session; 
} 

Но независимо от того, что я могу изменить, я буду всегда получаю сообщение об ошибке 400.

Что я делаю неправильно ?

Update:

Я выполнил завиток с онлайновым инструментом после точного синтаксиса разработчиков веб-страницы Spotify, и я до сих пор есть HTTP STATUS 400 enter image description here

+0

Для начала слушайте то, что говорит вам сервер. 400 - это код ответа HTTP для «Bad Request». Это означает, что сервер не удовлетворен запросом, который вы ему отправили. В нем может отсутствовать информация или содержать неверно отформатированную информацию. – EJK

+0

похоже, что у вас может быть опечатка в вашем коде. Я вижу полуточку после «else» – EJK

+0

@EJK Да, я формирую POST с параметрами, которые Spotify должен выполнить. Im asuming Im строя что-то неправильно. – chntgomez

ответ

0

Попробуйте исправляя следующие ошибки

1) Исправьте опечатку в else. Не должно быть полуколоны после else.

2) Удалите код, который вычисляет длину содержимого и добавляет заголовок. Длина должна быть длины тела, а не строки запроса, как вы закодировали. Если вы просто удалите этот код, класс HttpUrlConnection должен сгенерировать этот заголовок для вас.

3) Поместите параметр типа гранта в корпус. Вот где документация говорит, что она принадлежит. У вас есть это в строке запроса. Вы должны иметь возможность использовать следующий код:

String body = GRANT_TYPE + "=" + CLIENT_CREDENTIALS; 
byte[] bodyBytes = body.getBytes("UTF-8"); 
OutputStream stream = httpURLConnection.getOutputStream(); 
stream.write(bodyBytes);  
stream.close(); 
+0

Спасибо, плохо попытаюсь опубликовать результаты в секунду – chntgomez

+0

Готово. Но ответ по-прежнему остается ошибкой 400. Я смотрю API Spotify. Возможно, я добавляю тело неправильно – chntgomez

+0

В debbuger говорится, что httpconnection имеет метод «GET». Может ли это быть отслежено до источника проблемы. – chntgomez

Смежные вопросы