EDIT: похоже, что основная проблема заключается в установке заголовка, состоящего только из строк, без пар ключ/значение и связанных разделителей, поскольку выполнение ручного запроса curl без =s дало мне ответ сервера, поэтому я отредактировал заголовок.
Я пытаюсь отправить запрос POST для аутентификации, как описано в это руководство по Amazon Alexa из приложения для Android с использованием Volley.
Для второго запроса, который я отправляю (для которого требуется заголовок), я получаю ошибку сервера 400, указывающую на неверный запрос.
Согласно учебной странице, вот как должен выглядеть заголовок запроса:
Запрос должен включать следующие заголовки:
POST /auth/o2/token Host: api.amazon.com Content-Type: application/x-www-form-urlencoded
Если я использую обычный метод getHeaders() для класса Volley Request для переопределения заголовков, я могу установить только хэш-карту, что приводит к следующему формату заголовка:
{Host=api.amazon.com, Content-Type=application/x-www-form-urlencoded}
(или {POST=/auth/o2/token, Host=api.amazon.com, Content-Type=application/x-www-form-urlencoded}
, если я включаю другую строку для первого бита)
Будучи новичком в Volley в целом, я задаюсь вопросом, не упускаю ли я здесь что-то действительно очевидное. Это запрос, который я отправляю:
StringRequest tokenPoller = new StringRequest(
Request.Method.POST,
"https://api.amazon.com/auth/O2/token",
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.i("volley", response);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d("volley", "Error: " + error.getMessage());
error.printStackTrace();
}
}) {
@Override
public String getBodyContentType() {
return "application/x-www-form-urlencoded";
}
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
params.put("grant_type", "device_code");
params.put("device_code", {{my device code from previous request}});
params.put("user_code", {{my user code from previous request}});
return params;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> headers = new HashMap<String, String>();
headers.put("Host", "api.amazon.com");
headers.put("Content-Type", "application/x-www-form-urlencoded");
return headers;
}
};
Я подозреваю, что что-то с заголовками не так, но я действительно не могу понять это. Я тоже пытался не переопределять заголовки, но безрезультатно. Любые указатели будут высоко оценены! Спасибо!