关于java:如何以编程方式发送带参数的HTTP请求?

How to programmatically send a HTTP request with parameters?

本问题已经有最佳答案,请猛点这里访问。

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

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

我的问题是:如何在文本框中发送信息,例如,从servlet发送到一个网站?


为什么不只是用一个URL调用一个Java的URL,比如HTTP:/You.Dima.NAME/YU/Servel/PATH?userfieldname=您要传递的值密码

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

或者,您可能希望深入到ApacheHTTP客户机中,模仿客户机发送的请求。

呃…你在做功能测试吗?为什么不去看看JMeter?

按评论更新

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

因此,如果您有一个名为tfield的文本字段,其中用户键入了some text,并且有一个名为ddfield的下拉列表,其中用户选择了optionX,它的值为optionX-Val。这个表单被提交到一个URL,http://my.domain.name/my/servlet--浏览器将发送一个看起来像

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

如果要模拟表单提交,则必须手动创建一个URL,该URL具有一个请求字符串,其中包含所有字段及其值,作为字段"名称=字段值顺序对",用与号(&;)分隔

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

希望这有帮助。


我不清楚你到底在做什么。我假设servlet将是发送数据的那个。这里有一些例子。

使用setattribute,然后转发请求

1
2
3
4
5
6
7
//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>

使用会话

2

上面的示例用于Web应用程序。将信息发送到另一个需要请求的Web应用程序。请参阅下面的示例。

1
2
3
4
5
//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>

如果这不是你的意思,添加更多细节将是一个帮助。


servlet负责另一端:它基本上是一个HTTP请求的处理程序,该请求位于servlet容器中。如果我正确理解您,您将要发送一个HTTP请求。您可以使用命令行工具(如EDCOX1 OR 6)来实现这一点,或者如果您想停留在Java Land中,您可以在ExpuleDPOT上尝试这个示例。使用您最喜欢的搜索引擎搜索更多示例,例如使用搜索词(如"通过URL发送GET请求")。

在您需要发送用户名和密码信息的情况下,您需要查看HTML并找到form元素的action属性的URL。然后您需要找到用户名和密码字段的名称。使用这些名称作为URL参数,可以构造一个模仿发送表单的GET请求。

注意:通常将密码以明文形式存储在代码中和/或以明文形式发送到网站不是一件好事。


为了以防万一有人感兴趣,有一个名为篡改数据的火狐插件。使用它,您可以停止和HTTP请求的发送并对其进行修改。它将向您显示发送参数所需的"url"、它们当前拥有的值以及它们的名称。你可以在这里看看。之后你可以使用request.sendRedirect('url you got from Tamper Data');