Вопрос

Я пытаюсь написать программу для автоматического тестирования моего веб-приложения.Чтобы добиться этого, я открываю соединение, используя HttpURLConnection.

Одна из страниц, которую я пытаюсь протестировать, выполняет перенаправление 302.Мой тестовый код выглядит следующим образом :

URL currentUrl = new URL(urlToSend);
HttpURLConnection connection = (HttpURLConnection) currentUrl.openConnection();
connection.connect();
system.out.println(connection.getURL().toString());

Итак, предположим, что urlToSend является http://www.foo.com/bar.jsp, и что эта страница перенаправляет вас на http://www.foo.com/quux.jsp.Мое заявление println должно быть распечатано http://www.foo.com/quux.jsp, верно?

НЕПРАВИЛЬНО.

Перенаправление никогда не происходит, и он выводит исходный URL-адрес.Однако, если я изменю строку переключения connection.connect() вызовом connection.getResponseCode(), это волшебным образом сработает.

URL currentUrl = new URL(urlToSend);
HttpURLConnection connection = (HttpURLConnection) currentUrl.openConnection();
//connection.connect();
connection.getResponseCode();
system.out.println(connection.getURL().toString());

Почему я вижу такое поведение?Я делаю что-нибудь не так?

Спасибо за помощь.

Это было полезно?

Решение

В connect() метод просто создает соединение.Вы должны зафиксировать запрос (позвонив getInputStream(), getResponseCode(), или getResponseMessage()) для того, чтобы ответ был возвращен и обработан.

Другие советы

В подключиться() метод реализован в классе URLConnection и не переопределяется HttpURLConnection класс.

Класс URLConnection не знает о HTTP и поэтому не должен следовать за перенаправлением HTTP, даже если он создавал реальное соединение.

Если вам нужно поведение, присущее протоколу HTTP, вы, вероятно, захотите придерживаться методов, реализованных в классе HttpURLConnection, таких как метод getResponseCode().

Добавьте следующее в свой onCreate

StrictMode.ThreadPolicy policy = new StrictMode.
ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy); 

Почему бы вам не использовать С помощью HttpClient из apache.

Попробуй Установите следующие направления, поскольку это могло бы помочь.На самом деле, попробуй getFollowRedirects сначала, чтобы увидеть, проблема ли это (маловероятно, поскольку по умолчанию это true).

Редактировать: Если это не ваша проблема, я бы попробовал прочитать что-нибудь из соединения (как вы делаете с getResponseCode но я бы тоже попробовал getHeaderField чтобы увидеть, приводит ли чтение чего-либо вообще к соблюдению редиректа).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top