Java HttpURLConnection не подключается при вызове connect()
Я пытаюсь написать программу для автоматического тестирования на моем webapp. Для этого я открываю соединение с помощью 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-адрес. Однако, если я изменю, выключите соединение.линия connect () с вызовом соединения.getResponseCode (), он волшебным образом работает.
URL currentUrl = new URL(urlToSend);
HttpURLConnection connection = (HttpURLConnection) currentUrl.openConnection();
//connection.connect();
connection.getResponseCode();
system.out.println(connection.getURL().toString());
почему я вижу такое поведение? Я делаю что-то не так?
Спасибо за помощь.
5 ответов
на connect()
метод просто создает соединение. Вы должны зафиксировать запрос (позвонив getInputStream()
, getResponseCode()
или getResponseMessage()
) для ответа, который будет возвращен и обработан.
на connect () метод реализован в классе URLConnection, и не переопределяется HttpURLConnection класса.
класс URLConnection не знает HTTP и поэтому не должен следовать перенаправлению HTTP, даже если он создавал реальное соединение.
Если вы хотите поведение, присущее протоколу HTTP, вы, вероятно, хотите придерживаться методов, реализованных в классе HttpURLConnection, как метод getResponseCode() есть.
добавьте следующее в свой onCreate
StrictMode.ThreadPolicy policy = new StrictMode.
ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
попробовать setFollowRedirects, так как это может помочь. На самом деле, попробуйте getFollowRedirects
чтобы увидеть, если это проблема, во-первых (что маловероятно, так как это по умолчанию true).
Edit: если это не ваша проблема, я бы попытался прочитать что-то из соединения (как вы делаете с getResponseCode
но я бы тоже попробовал getHeaderField
чтобы увидеть, если чтение чего-либо вообще вызывает перенаправление, чтобы уважать).