如何以编程方式发送带有参数的HTTP请求?

2022-09-03 15:25:54

如果我使用浏览器向服务器发送信息(例如使用登录密码页面),我只需填写用户文本框和密码文本框,然后单击登录按钮即可。

我想发送此信息,但不必使用浏览器。我想“填充”文本框,但不必在浏览器中手动完成。可能正在使用 Servlet。

我的问题是:如何将文本框中的信息发送到网站,从Servlet进行?


答案 1

为什么不直接使用像 http://your.domain.name/your/servlet/path?userFieldName=THE_VALUE_YOU_WANT_TO_PASS&passwdFieldName=PASSWORD 这样的URL从Java调用URL呢?

servlet 会觉得这些值来自这些框。

或者,您可能希望深入研究Apache HTTP客户端以模仿从客户端发送的请求。

呃。。哦。。你正在做功能测试吗?为什么不看看JMeter呢


根据评论进行更新

您需要知道表单提交的实际用途是什么?它基本上形成了一个由键值(KV)对组成的查询字符串。

因此,如果您有一个名为“用户已键入 ”的文本字段,并且有一个名为 的下拉列表,其中用户选择了具有值的下拉列表。这个表单被提交到一个URL,浏览器将发送一个请求,看起来像tfieldsome textddfieldoptionXoptionX-Valhttp://my.domain.name/my/servlet

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

如果要模仿表单提交,则必须手动创建一个 URL,该 URL 具有一个请求字符串,其中包含所有字段及其值,如 FIELD_NAME=FIELDVALUE 有序对,由与号 (&) 分隔


啊,好主意。如果您使用 Firebug(Firefox 扩展),请在 Firebug 中打开 NET 面板,手动提交要模仿的表单。查看提交表单时发布的请求。它将具有您所追求的确切URL格式。复制此 URL,替换值并根据需要进行虚假提交。

希望这有帮助。


答案 2

我不清楚你到底在做什么。我假设 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>    

上面的示例旨在 Web 应用程序中工作。将信息发送到另一个 Web 应用程序,该应用程序需要请求。请参阅下面的示例。

//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>

如果这不是您的意思,添加更多详细信息将有所帮助。


推荐