Java HttpURLConnection не соединяется, когда я называю подключение ()

Я пытаюсь записать программу, чтобы сделать автоматизированное тестирование на моем веб-приложении. Для выполнения этого я открываю использование соединения 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());

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

Спасибо за справку.

7
задан sangfroid 28 January 2010 в 00:07
поделиться

4 ответа

рабочие процессы являются способом сегментирования выполнения вашего веб-сайта на нескольких экзамене. Вы делаете это на пару причин, один, если один из рабочих озадачен вопросами времени пробега, это не забирает других. Например, если запрашивается HTML-запрос, который приводит к тому, что процесс не работает, то только другие запросы, которые обрабатываются тем, что один рабочий процессор будет убит. Другим примером является то, что один запрос может вызвать блокировку против других потоков, обрабатываемых тем же рабочим.

Насколько вам нужно, выполните тестирование нагрузки. Усердно ударил приложение и посмотрите, что происходит только с одним. Затем добавьте еще немного и нажмите его снова. В какой-то момент вы достигнете по-настоящему насыщению сети машин, диска, CPU и RAM. Вот когда вы знаете, у вас есть правильный баланс.

Кстати, вы можете управлять количеством потоков, используемых на процессу работника через файл Machine.config. Я считаю, что ключ - MaxWorkerTreads.

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

Для всех намерений и целей вы можете рассмотреть каждый рабочий процесс как собственный отдельный веб-сервер. За исключением того, что они работают на той же коробке.

-121--946659-

Метод подключения () просто создает соединение. Вы должны совершить запрос (по телефону getInputStream () , getResponsecode () , или GetResponseMessage () ) для возврата и обработки ответа.

17
ответ дан 6 December 2019 в 10:00
поделиться

Почему вы не используете httpClient из Apache.

0
ответ дан 6 December 2019 в 10:00
поделиться

Попробуйте SetFollowredirets , как это может помочь. На самом деле, попробуйте getFollowredirets , чтобы увидеть, если это проблема, сначала (вряд ли, так как это верно по умолчанию).

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

0
ответ дан 6 December 2019 в 10:00
поделиться

Если я не пропустил что-то очевидное, я думаю, что есть простой ответ.

Для прямоугольной области MXn, количество точек P, RADIUS R:

  • Инициализирует карту (например, 2D Array int) вашей области MXN для всех нулей
  • для каждого из ваших точек P
    • Увеличение всех точек карты в радиусе R на 1
  • Найти элемент карты с максимальным значением - это будет центром круга, который вы ищете

, это O (P), предполагая, что P - переменная интерес.

-121--3006996-

Метод . Способ подключения () реализован в классе URLConnection и не переопределен классом httpurLconnection .

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

Если вы хотите, чтобы поведенческое поведение в протокол HTTP, вы, вероятно, хотите придерживаться методов, реализованных в классе httpurlconnection, как метод getResponsecode ().

1
ответ дан 6 December 2019 в 10:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: