2016-06-24 11 views
0

Я пытаюсь сделать запрос GET в приложении Android с помощью библиотеки Volley. Этот запрос GET предназначен для проверки учетных данных учетной записи с использованием базовой HTTP-аутентификации. Я проверил, что URL-адрес с учетными данными работает в моем браузере, когда он возвращает успешный XML. Формат:Volley throwing AuthFailureError (401) с базовой HTTP-аутентификацией

http://username:[email protected]/api/account/verify_credentials.xml

где username и password явно представляют собой реальные учетные данные пользователя. Залп выдает эту ошибку:

BasicNetwork.performRequest: Unexpected response code 401 for http://username:[email protected]/api/account/verify_credentials.xml 

Вот мой Android код, который обрабатывает запрос:

private static final String HTTP_PRE = "http://"; 
private static final String VERIFY_CREDENTIALS = "myanimelist.net/api/account/verify_credentials.xml"; 

public void verifyCredentials(String username, String password) { 
    RequestQueue queue = Volley.newRequestQueue(context); 
    String url = HTTP_PRE + username + ":" + password + "@" + VERIFY_CREDENTIALS; 

    StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() { 

     @Override 
     public void onResponse(String response) { 
      processResponse(response); 
     } 
    }, new Response.ErrorListener() { 

     @Override 
     public void onErrorResponse(VolleyError error) { 
      // handle error 
      Log.d(TAG, "error: " + error.getMessage()); 
     } 
    }); 

    queue.add(stringRequest); 
} 

Это решение переопределить getHeaders() метод при условии, что тот же результат: How does one use Basic Authentication with Volley on Android?.

Вот моя реализация этого решения:

@Override 
public Map<String, String> getHeaders() throws AuthFailureError { 
    Map<String, String> params = super.getHeaders(); 
    if (params == null){ 
     params = new HashMap<>(); 
    } 
    String creds = String.format("%s:%s", username, password); 

    params.put("Authorization", creds); 

    return params; 
} 

который вернул эту ошибку без полномочий, построенных непосредственно в URL:

BasicNetwork.performRequest: Unexpected response code 401 for http://myanimelist.net/api/account/verify_credentials.xml 

Если кто-то может дать совет, я бы очень признателен Это. Это мой первый раз, используя базовую HTTP-аутентификацию, чтобы я мог упустить что-то очевидное.

ответ

0

Я решил эту проблему после первого ответа здесь: Http Authentication in android using volley library. Я попробовал нечто подобное и многие другие решения, но это был единственный, который работал.

0

Базовая аутентификация использует кодировку BASE64. Вы упускаете

String creds = String.format("%s:%s", username, password); 
creds = Base64.encodeToString(creds.getBytes(), Base64.NO_WRAP); 

Авторизация заголовок HTTP требует, чтобы указать используемый метод (Basic | Digest). Наконец, заголовки должны выглядеть так:

GET http://username:[email protected]/api/account/verify_credentials.xml 
Accept: text/xml,text/plain 
... 
Authorization: Basic XXXXXXXXXXXXXX== 
Смежные вопросы