Как переопределить залп, чтобы не выкидывать ошибку на 302 редиректе - PullRequest
0 голосов
/ 20 апреля 2020

Я очень новичок ie до Java dev, так что это может быть очень тупой вопрос.

Мне удалось запросить URL-адрес с помощью Volley и остановить его от автоматического следования перенаправлениям (изначально я получить 302, но мне нужно проверить заголовки ответа до 302). Я также могу видеть нужные мне заголовки. Проблема в том, что это действие остановки перенаправлений выдает ошибку BasicNetwork.performRequest: Unexpected response code 302 for https://example.com

Итак, все, что мне нужно сделать после этого, мне нужно будет ввести onErrorResponse, что я считаю нехорошо. Из того, что я видел, решение состоит в том, чтобы переопределить класс BasicNetwork и изменить: if (statusCode < 200 || statusCode > 299) на if (statusCode < 200 || statusCode > 299) && statusCode == 302, но я действительно изо всех сил пытаюсь понять и написать эту часть.

Имеет ли это смысл? Как я могу переопределить этот класс?

Ниже приведен фрагмент моего кода:

public String loginUser(String mobilePayload) {
                    String url = "https://example.com/?mobilePayload=" + mobilePayload;
                    RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this, new HurlStack() {
                        @Override
                        //disable auto follow redirects
                        protected HttpURLConnection createConnection(URL url) throws IOException {
                            HttpURLConnection connection = super.createConnection(url);
                            connection.setInstanceFollowRedirects(false);
                            return connection;
                        }
                    });
                    Log.d("tag_debug", url);
                    StringRequest stringRequest = new StringRequest(Method.GET, url, new Response.Listener<String>() {
                        @Override
                        public void onResponse(String response) {
                            Log.d("tag_debug","Response is: "+ response);
                        }
                    }, new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            NetworkResponse response = error.networkResponse;
                            Log.d("tag_debug","That didn't work!");
                            Log.d("tag_debug",error.toString());
                            // GETTING THE HEADERS HERE
                            Log.d("tag_debug",response.headers.get("Location"));
                        }
                    }) {
                        @Override
                        protected Response<String> parseNetworkResponse(NetworkResponse response) {
                            Log.d("tag_debug", "Headers:" + response.headers);
                            return super.parseNetworkResponse(response);
                        }
                    };
                    requestQueue.add(stringRequest);
                }
...