Прежде всего, я должен сказать, что я прочитал несколько подобных историй здесь, но ни одна из них не решила мою проблему получения кода ошибки 400.
Я хочу отправить некоторую информацию для входа на сервер в Android Studio 3.3.1 и библиотеку залпов, используя метод Post. Я посылаю params в качестве значения ключа в getBody и устанавливаю тип содержимого в getBodyContentType ().
Сервер получает параметры только в формате xxx-form-urlencoded. Я использую Почтальон в качестве прокси, чтобы увидеть, что отправляет ...
параметры принимаются почтальоном в теле в необработанном формате, а не в формате xxx-form-urlencoded, и я думаю, что именно поэтому сервер не может получить параметры входа в систему, и я получаю код ошибки 400 (BasicNetwork.performRequest: неожиданный код ответа 400) -
Кстати, сервер написан на asp.net и веб-сервере IIS.
private void PostParams()
{
Boolean is_valid_user;
try {
String URL = "http://192.168.43.22:5555/AOBServices/login";
JSONObject jsonBody = new JSONObject();
jsonBody.put("my_very_special_key","Love");
jsonBody.put("username", "amir");
jsonBody.put("password", "1234");
jsonBody.put("grant_type", "password");
final String requestBody = jsonBody.toString();
final StringRequest stringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.i("VOLLEY", response);
Toast.makeText(LoginActivity.this, "SUCCESSSSSSSSSSSSS \n response: "+response, Toast.LENGTH_SHORT).show();
//update shared prefs.....
myResponse=response;
shprefs= new sharedPrefsClass(getApplicationContext());
shprefs.setDefaults("USER_ID", mEmail);
shprefs.setDefaults("IS_SIGNEDIN", true);
startActivity(new Intent(LoginActivity.this,MainActivity.class));
finish();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// As of f605da3 the following should work
NetworkResponse response = error.networkResponse;
if (error instanceof ServerError && response != null) {
try {
String res = new String(response.data,
HttpHeaderParser.parseCharset(response.headers, "utf-8"));
} catch (UnsupportedEncodingException e1) {
// Couldn't properly decode data to string
e1.printStackTrace();
}
}
}
}) {
@Override
public String getBodyContentType() {
return "application/x-www-form-urlencoded; charset=UTF-8";
}
@Override
protected String getParamsEncoding() {
return "utf-8";
}
@Override
public byte[] getBody() throws AuthFailureError {
try {
return requestBody == null ? null : requestBody.getBytes("utf-8");
} catch (UnsupportedEncodingException uee) {
VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s", requestBody, "utf-8");
return null;
}
}
@Override
protected Response<String> parseNetworkResponse(NetworkResponse response) {
String responseString = "";
if (response != null) {
responseString = String.valueOf(response.statusCode);
// can get more details such as response.headers
}
return Response.success(responseString, HttpHeaderParser.parseCacheHeaders(response));
}
};
requestQueue.add(stringRequest);
} catch (JSONException e) {
e.printStackTrace();
}
}