Как программно отправлять 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');