如果我使用浏览器向服务器发送信息(例如使用登录、密码页面),我只需填写用户文本框和密码文本框,然后点击登录按钮。
我想发送这些信息,但不想使用浏览器。我想要“填写”文本框,但不想在浏览器中手动执行此操作。也许可以使用Servlet。
我的问题是:如何从Servlet中向网站发送文本框中的信息?
为什么不使用类似于http://your.domain.name/your/servlet/path?userFieldName=THE_VALUE_YOU_WANT_TO_PASS&passwdFieldName=PASSWORD这样的URL,从Java中拨打URL呢?
Servlet会感觉这些值来自那些框。
或者您可能想深入了解Apache HTTP Client,以模拟从客户端发送的请求。
哦,你在进行功能测试吗?为什么不研究一下JMeter呢?
根据评论更新
你需要了解表单提交实际上是做什么的? 它基本上会构成一个由键值对 (KV) 组成的查询字符串。
所以,如果你有一个名为 tfield
的文本域,用户在其中键入了 some text
,并且有一个下拉菜单名为 ddfield
,用户选择了值为 optionX-Val
的选项 optionX
。当这个表单被提交到 http://my.domain.name/my/servlet
这个 URL 时,浏览器将发送一个请求,它看起来像是这样的:
http://my.domain.name/my/servlet?tfield=some%20text&ddfield=optionX-Val
啊,好主意。如果您使用Firebug(Firefox扩展程序),请在Firebug中打开NET面板,手动提交您想要模仿的表单。查看您提交表单时发布的请求。它将具有您所需的精确URL格式。复制此URL,替换值并随意进行虚假提交。
希望这可以帮助您。
我不太清楚你的真正意图。我假设Servlet将会发送数据。以下是一些示例:
使用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>
curl
,或者如果你想留在Java领域,你可以尝试exampledepot上的这个例子。使用你喜欢的搜索引擎搜索更多的例子,例如使用“通过url发送GET请求”的搜索词。form
元素的action
属性的url。然后你需要找到用户名和密码字段的名称。使用这些名称作为url参数,你可以构造一个GET请求,模拟发送一个表单。如果有人感兴趣,Firefox 有一个名为 Tamper Data 的插件。使用它可以停止发送 HTTP 请求并修改它。它会显示你需要发送参数的 "url"、它们当前的值和名称。你可以在这里查看 here。之后,你可以使用 request.sendRedirect('从 Tamper Data 获取的 url');