POST-запрос входа в Android с использованием Volley - PullRequest
0 голосов
/ 12 июня 2019

Привет, ребята. У меня проблема с запросом Volley POST. Я хочу войти на страницу, где есть просто поле для входа пользователя. Ответ на этот запрос - просто html-код этого окна регистрации. Он должен войти в систему (как код POSTman ниже), а затем я могу делать другие вещи, которые мне нужно сделать. Данные для входа в код не действительны только пример.

    @Override
    protected void onCreate(Bundle savedInstanceState) {
         requestQueue = Volley.newRequestQueue(this);
         requestQueue.start();
    }

    @Override
    public void onClick(View v) {
        if (v == buttonLogin) {
            loginUser();
        }
    }

    public void loginUser() {
         StringRequest stringRequest = new StringRequest(Request.Method.POST, "http://ns3.apis.sk:28080/login_check",
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    getJsonData();
                    Log.d("Response", response);
                    Toast.makeText(LoginActivity.this, response, Toast.LENGTH_LONG).show();
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Toast.makeText(LoginActivity.this, error.toString(), Toast.LENGTH_LONG).show();
                }
            }){
            @Override
            protected Map<String,String> getParams(){
                Map<String,String> params = new HashMap<>();
                params.put("_username","admin");
                params.put("_password","root");
                return params;
            }

            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                final HashMap<String, String> headers = new HashMap<>();
                headers.put("Content-Type", "multipart/form-data");
                return headers;
        }
    };
    requestQueue.add(stringRequest);
}

Также есть код POSTman, который делает то, чего я хочу достичь в Android должным образом.

     {
        "name": "http://ns3.apis.sk:28080 - login_check",
        "request": {
            "method": "POST",
            "header": [
                {
                    "key": "Content-Type",
                    "name": "Content-Type",
                    "value": "application/json",
                    "type": "text"
                }
            ],
            "body": {
                "mode": "formdata",
                "formdata": [
                    {
                        "key": "_username",
                        "value": "admin",
                        "type": "text"
                    },
                    {
                        "key": "_password",
                        "value": "root",
                        "type": "text"
                    }
                ]
            },
            "url": {
                "raw": "http://ns3.apis.sk:28080/login_check",
                "protocol": "http",
                "host": [
                    "ns3",
                    "apis",
                    "sk"
                ],
                "port": "28080",
                "path": [
                    "login_check"
                ]
            }
        },
        "response": []
    }

Ответы [ 2 ]

0 голосов
/ 12 июня 2019

Привет, ребята, так что наконец-то решил. Удален метод getheaders (). Вероятно, библиотека Volley знает, что использовать неявно. И самое важное - включить куки, потому что в Volley по умолчанию они отключены.

@Override
    protected void onCreate(Bundle savedInstanceState) {
         CookieManager manager = new CookieManager();
         CookieHandler.setDefault(manager);
         requestQueue = Volley.newRequestQueue(this);
         requestQueue.start();
    }

    @Override
    public void onClick(View v) {
        if (v == buttonLogin) {
            loginUser();
        }
    }

    public void loginUser() {
         StringRequest stringRequest = new StringRequest(Request.Method.POST, "http://ns3.apis.sk:28080/login_check",
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    getJsonData();
                    Log.d("Response", response);
                    Toast.makeText(LoginActivity.this, response, Toast.LENGTH_LONG).show();
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Toast.makeText(LoginActivity.this, error.toString(), Toast.LENGTH_LONG).show();
                }
            }){
            @Override
            protected Map<String,String> getParams(){
                Map<String,String> params = new HashMap<>();
                params.put("_username","admin");
                params.put("_password","root");
                return params;
            }
    };
    requestQueue.add(stringRequest);
0 голосов
/ 12 июня 2019

используйте этот код для заголовка

@Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            final HashMap<String, String> headers = new HashMap<>();
           // headers.put("Content-Type", "multipart/form-data");
            return headers;
 @Override
        public String getBodyContentType() {
            return "multipart/form-data";
        }

используйте это для поля

JSONObject jsonParams = new JSONObject();
jsonParams .put("_username","admin");
jsonParams .put("_password","root");

Я надеюсь, что это поможет вам

...