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

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

我想发送此信息,但无需使用浏览器。 我想“填写”文本框,但无需在浏览器中手动完成。 可能正在使用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来模仿客户端发送的请求。

呃……你在做function测试吗? 为什么不看看JMeter ?


根据评论更新

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

因此,如果您有一个名为tfield文本字段,其中用户键入了some text ,并且有一个名为ddfield的下拉列表,其中用户选择了具有值optionX-Val 。 此表单将提交到URL, http://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,替换值并根据需要进行虚假提交。

希望这可以帮助。

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

使用会话

  //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 ${user} 

以上示例旨在在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 ${param.user} 

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

一个servlet处理另一端:它基本上是一个生成在servlet容器内的http请求的处理程序。 如果我理解正确,你想要发送一个http请求。 你可以使用像curl这样的命令行工具来做到这一点,或者如果你想留在java土地上,你可以在exampledepot上试试这个例子 。 使用您最喜欢的搜索引擎搜索更多示例,例如搜索条件,例如“通过url发送GET请求”。

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

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

万一有人感兴趣,有一个名为Tamper数据的Firefox插件。 有了它,你可以停止发送和http请求并修改它。 它将向您显示发送参数所需的“url”,它们当前具有的值以及它们的名称。 你可以在这里查看 。 之后你可以使用request.sendRedirect('url you got from Tamper Data');