2016-06-24 4 views
0

私は、Volleyライブラリを使用してAndroidアプリケーションでGETリクエストを作成しようとしています。このGET要求は、基本HTTP認証を使用してアカウントの資格情報を確認することです。私は成功したXMLを返すので、資格情報を持つURLがブラウザで動作することを確認しました。形式は次のとおりです。usernamepasswordは明らかに実際のユーザーの資格情報を表すVolley throwing AuthFailureError(401)with Basic HTTP認証

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

。バレーボールは、このエラーがスローされます。ここでは

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

が要求を処理する私のAndroidのコードです: How does one use Basic Authentication with Volley on Android?:getHeadersを上書きする

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

この溶液()メソッドは、同じ結果を提供します。

ここ

は、そのソリューションの私の実装です:

URLに直接組み込まれた資格情報なしに、このエラーが返さ
@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; 
} 

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エンコーディングが使用されます。あなたは認証 HTTPヘッダー

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

を逃している(基本|ダイジェスト)を使用する方法を示すために必要です。最後にヘッダーは次のようになります。

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