2016-06-24 1 views
0

Ich versuche, eine GET-Anfrage in einer Android-Anwendung mit der Volley-Bibliothek zu machen. Diese GET-Anforderung dient zur Überprüfung der Kontoanmeldeinformationen mithilfe der einfachen HTTP-Authentifizierung. Ich habe überprüft, dass die URL mit den Anmeldeinformationen in meinem Browser funktioniert, da sie erfolgreiches XML zurückgibt. Das Format ist:Volley wirft AuthFailureError (401) mit einfacher HTTP-Authentifizierung

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

wo username und password offensichtlich echte Benutzerdaten darstellen. Volley wirft diesen Fehler:

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

Hier ist mein Android-Code, der die Anforderung verarbeitet:

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); 
} 

Diese Lösung, die getHeaders außer Kraft zu setzen() -Methode das gleiche Ergebnis zur Verfügung gestellt: How does one use Basic Authentication with Volley on Android?.

Hier ist meine Implementierung dieser Lösung:

@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; 
} 

Welche diesen Fehler direkt in die URL gebaut, ohne dass die Anmeldeinformationen zurückgegeben:

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

Wenn jemand beraten könnte, würde ich wirklich zu schätzen es. Dies ist das erste Mal, dass ich die einfache HTTP-Authentifizierung nutze, damit ich etwas Offensichtliches übersehen kann.

Antwort

0

Basisauthentifizierung verwendet BASE64-Codierung. Sie fehlt

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

Die Authorization HTTP-Header erfordert die Methode verwendet, um anzuzeigen (Grund | Digest). Zuletzt sollten Sie Header so aussehen:

GET http://username:[email protected]/api/account/verify_credentials.xml 
Accept: text/xml,text/plain 
... 
Authorization: Basic XXXXXXXXXXXXXX==