com.android.volly.AuthFailureError在向django服务器发出基本的volly POST请求

com.android.volly.AuthFailureError在向django服务器发出基本的volly POST请求

问题描述:

我试图从我的android应用程序连接到django服务器。我试图访问我的api,使用volly发出POST请求。一切都设定好了。所有的参数和头文件都需要,但是我仍然得到这个错误。com.android.volly.AuthFailureError在向django服务器发出基本的volly POST请求

log: [490] BasicNetwork.performRequest: Unexpected response code 401 for https://example.com/ 

它不让我访问我的Django Api。它适用于PHP服务器。

public void vollyRequest() 
    { 
     RequestQueue queue = Volley.newRequestQueue(this); 
     StringRequest request = new StringRequest(Request.Method.POST , "https://example.com/", new Response.Listener<String>() { 

      @Override 
      public void onResponse(String response) { 
       Toast.makeText(MainActivity.this, "RESPONSE: " + response, Toast.LENGTH_SHORT).show(); 
      } 

     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       Toast.makeText(MainActivity.this, "ERROR: " + error, Toast.LENGTH_SHORT).show(); 
      } 
     }) { 

      @Override 
      protected Map<String,String> getParams(){ 
       Map<String,String> params = new HashMap<String, String>(); 
       params.put("username","***"); 
       params.put("password","***"); 
       return params; 
       } 
//   @Override 
//   public Map<String, String> getHeaders() throws AuthFailureError { 
//   Map<String,String> params = new HashMap<String, String>(); 
//   params.put("Content-Type","application/x-www-form-urlencoded"); 
//   return params; 
//   } 
     }; 
     queue.add(request); 
    } 
+0

我与Php服务器有同样的错误 –

+0

@CodeWarrior你解决了这个问题吗? –

我解决了这个问题我自己... 这个代码将让你的身份验证令牌,与您提供的用户名和密码,然后该令牌将被放置在标题中得到数据服务器...

public void vollyRequestGetAuthToken() 
{ 
    RequestQueue queue = Volley.newRequestQueue(this); 
    StringRequest request = new StringRequest(Request.Method.POST , "https://example.com/get-auth-token/", new Response.Listener<String>() { 

     @Override 

    public void onResponse(String response) { 
     Toast.makeText(MainActivity.this, "RESPONSE: " + response, Toast.LENGTH_SHORT).show(); 
     System.out.println("RESPONSE:   >>> " + response + "<<<"); 
    } 
}, new Response.ErrorListener() { 
    @Override 
    public void onErrorResponse(VolleyError error) { 
     Toast.makeText(MainActivity.this, "ERROR: " + error, Toast.LENGTH_SHORT).show(); 
    } 
}) { 
    @Override 
    protected Map<String,String> getParams(){ 
     Map<String,String> params = new HashMap<String, String>(); 
     params.put("username","*****"); 
     params.put("password","*****"); 
     return params; 
    } 
    @Override 
    public Map<String, String> getHeaders() throws AuthFailureError { 
     Map<String,String> params = new HashMap<String, String>(); 
     params.put("Authorization", 
       String.format("Basic %s", Base64.encodeToString(
         String.format("%s:%s", "<username>", "<password>").getBytes(), Base64.DEFAULT))); 
     params.put("username" , "*****"); 
     params.put("password" , "*****"); 
     return params; 
    } 
}; 
    queue.add(request); 
} 

,现在当你有身份验证令牌,使用下面的代码来发送身份验证令牌来获得数据

@Override 
      public Map<String, String> getHeaders() throws AuthFailureError { 
       HashMap<String, String> headers = new HashMap<String, String>(); 
       headers.put("Authorization", "Token <token>"); 
       return headers; 
      }