【发布时间】:2019-03-09 20:52:32
【问题描述】:
我正在尝试从服务器(Laravel)获取令牌并保存到数据库(android),但是当向服务器发送请求时出现此错误:
E/Volley: [276] BasicNetwork.performRequest: Unexpected response code 401 for http://192.168.1.4:8000/api/user/login
E/Volley: [276] BasicNetwork.performRequest: Unexpected response code 401 for http://192.168.1.4:8000/api/user/login
D/error: com.android.volley.AuthFailureError
安卓代码(java):
public void loginUser(String email, String password, final OnLoginResponse onLoginResponse){
JSONObject requestJsonObject=new JSONObject();
try {
requestJsonObject.put("email",email);
requestJsonObject.put("password",password);
JsonObjectRequest request=new JsonObjectRequest(Request.Method.POST, "http://192.168.1.4:8000/api/user/login",requestJsonObject , new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
onLoginResponse.onResponse(response.optString("token"));
Log.d("response",response.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("error",error.toString());
}
}) {
/**
* Passing some request headers*
*/
@Override
public Map getHeaders() throws AuthFailureError {
HashMap headers = new HashMap();
headers.put("Content-Type", "application/json");
headers.put("csrf-token", "X-XSRF-TOKEN");
return headers;
}
};
request.setRetryPolicy(new DefaultRetryPolicy(18000,DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
Volley.newRequestQueue(context).add(request);
} catch (JSONException e) {
Log.e(TAG, "loginUser: "+e.toString());
}
}
我使用邮递员检查了客户端,这没有问题,并且返回令牌没有问题。
这是邮递员的截图:
【问题讨论】:
-
你能展示一下你是如何在邮递员中完成请求的吗?
-
是的,我发送了格式如下的 json { username:"example" , ...} 和邮递员以 Json 格式返回令牌。
-
您能否将您在 Postman 中发送的确切请求发布为 JSON 或屏幕截图,以检查您如何发送请求标头
-
当然,添加截图。
-
在您的屏幕截图中,您上传的内容有
name不在您的 java 代码中,它有不同的端点localhost和/register而在您的 java 中您有192.168.1.4...和/login。您能否在正确的请求中向邮递员展示(我在此表示同情,屏幕截图与您使用 Java 和 Volley 尝试的代码看起来不一样)您在哪里使用像csrf-token这样的标头?
标签: java android json laravel android-volley