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

15

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

我想发送这些信息,但不想使用浏览器。我想要“填写”文本框,但不想在浏览器中手动执行此操作。也许可以使用Servlet。

我的问题是:如何从Servlet中向网站发送文本框中的信息?


1
请参见:https://dev59.com/vHE85IYBdhLWcg3wZyqt - BalusC
4个回答

8

为什么不使用类似于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

如果想要模拟表单提交,您需要手动创建一个URL,该URL包含请求字符串,其中包含所有字段及其值,格式为FIELD_NAME=FIELDVALUE的有序对,由&符号分隔。

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

希望这可以帮助您。


好的,这是针对文本框的情况,但是列表框呢?它是否也适用相同的方法?还是有所不同? - fernandohur
这是一个很好的答案。 - Dahlia

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>

如果这不是你的意思,提供更多细节将会有所帮助。

1
一个servlet负责另一端:它基本上是一个在servlet容器内运行的http请求处理程序。如果我理解你的意思正确,你想发送一个http请求。你可以使用命令行工具如curl,或者如果你想留在Java领域,你可以尝试exampledepot上的这个例子。使用你喜欢的搜索引擎搜索更多的例子,例如使用“通过url发送GET请求”的搜索词。
在你的情况下,当你需要发送用户名和密码信息时,你需要查看html并找到form元素的action属性的url。然后你需要找到用户名和密码字段的名称。使用这些名称作为url参数,你可以构造一个GET请求,模拟发送一个表单。
注意:通常在代码中以明文形式存储密码和/或以明文形式将其发送到网站不是一个好习惯。

0

如果有人感兴趣,Firefox 有一个名为 Tamper Data 的插件。使用它可以停止发送 HTTP 请求并修改它。它会显示你需要发送参数的 "url"、它们当前的值和名称。你可以在这里查看 here。之后,你可以使用 request.sendRedirect('从 Tamper Data 获取的 url');


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接