Как программно отправлять HTTP-запрос с параметрами?

Если я использую браузер для отправки информации на сервер (например, используя страницу входа в систему, пароль), я просто заполняю текстовое поле пользователя и текстовое поле пароля и нажимаю кнопку входа.

Я бы хотел отправить эту информацию, но без использования браузера. Я хотел бы "заполнить" текстовые поля, но без необходимости делать это вручную в браузере. Возможно использование сервлета.

Мой вопрос: как отправлять информацию в текстовые поля, например, на веб-сайт, делая это из сервлета?

Ответ 1

почему бы просто не позвонить из URL из Java, используя URL-адрес, например http://your.domain.name/your/servlet/path?userFieldName=THE_VALUE_YOU_WANT_TO_PASS&passwdFieldName=PASSWORD

Сервлет будет чувствовать, что значения поступают из этих полей.

Или вы можете захотеть погрузиться в Apache HTTP Client, чтобы имитировать запрос, отправленный с клиента.

uh..oh.. вы проводите функциональное тестирование? Почему бы не заглянуть в JMeter?


Обновления по комментариям

Вам нужно знать что на самом деле формирует представление? В основном он формирует строку запроса, состоящую из пары Key-Values ​​(KV).

Итак, если у вас есть текстовое поле с именем tfield, где пользователь набрал some text, и есть выпадающее имя, ddfield, где пользователь выбрал optionX, который имеет значение optionX-Val. И эта форма отправляется на URL-адрес, http://my.domain.name/my/servlet - браузер отправит запрос, который будет выглядеть как

http://my.domain.name/my/servlet?tfield=some%20text&ddfield=optionX-Val

Если вы хотите подражать форме, вам придется вручную создать URL-адрес, содержащий строку запроса, содержащую все поля и их значения, в качестве упорядоченной пары FIELD_NAME = FIELDVALUE, разделенной амперсандом (&)


ах, отличная идея. Если вы используете Firebug (расширение Firefox), откройте панель NET в Firebug, сделайте ручную подачу формы, которую вы хотели подражать. Посмотрите, какой запрос отправлен, когда вы отправили форму. Он будет иметь точный формат URL, который вам нужен. Скопируйте этот URL-адрес, замените значения и сделайте фальшивые отправки столько, сколько хотите.

Надеюсь, что это поможет.

Ответ 2

сервлет заботится о другом конце: он в основном обработчик HTTP-запросов, который живет внутри контейнера сервлета. Если я правильно вас понимаю, вы хотите отправить HTTP-запрос. Вы можете сделать это с помощью инструментов командной строки, таких как curl, или если вы хотите остаться на территории java, вы можете попробовать этот пример на exampledepot, Используйте свою любимую поисковую систему, чтобы найти больше примеров, например. с поисковыми терминами, такими как "отправка запросов GET через URL".

В вашей ситуации, когда вам нужно отправить информацию для имени пользователя и пароля, вам нужно посмотреть на html и найти URL-адрес для атрибута form element action. Затем вам нужно найти имена полей имени пользователя и пароля. Используя эти имена в качестве параметров url, вы можете создать запрос GET, который имитирует отправку формы.

ПРИМЕЧАНИЕ. Обычно сохранение пароля в виде простого текста в коде и/или отправка его в обычный текст на веб-сайт не очень хорошо.

Ответ 3

Мне непонятно, что вы на самом деле делаете. Я предполагаю, что сервлет будет тем, кто будет отправлять данные. Вот несколько примеров.

С помощью setAttribute затем Переслать запрос

//On your servlet
request.setAttibute('user', 'admin');
request.setAttribute('password', '123');
getServletContext().getRequestDispatcher("page.jsp").forward(request, response);

//On your jsp page get the value using EL
<span>${user}</span>

Использование сеанса

 //On your servlet
HttpSession session = request.getSession(true);
session.setAttribute('user', 'admin');
session.setAttribute('password', '123');
getServletContext().getRequestDispatcher("page.jsp").forward(request, response);

//On your jsp page get the value using EL
<span>${user}</span>    

Приведенный выше пример предназначен для работы в веб-приложении. Чтобы отправить информацию в другое веб-приложение, ожидающее запрос. См. Пример ниже.

//On your jsp or servlet, you can also do the same within web application
request.sendRedirect('http://example.com?user=admin&password=123');

//on your jsp @example.com
<span>${param.user}</span>

Если это не то, что вы имеете в виду, добавление более подробной информации поможет вам.

Ответ 4

На всякий случай кто-то заинтересован, есть плагин для Firefox, называемый данными Tamper. С его помощью вы можете остановить отправку и запрос HTTP и изменить его. Он покажет вам "url", который вам нужен для отправки параметров, значений, которые они имеют в настоящее время, и их имени. Вы можете проверить это здесь. После этого вы можете использовать request.sendRedirect('url you got from Tamper Data');