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

Java 如何以编程方式发送带有参数的HTTP请求?,java,http,servlets,Java,Http,Servlets,如果我使用浏览器向服务器发送信息(例如,使用登录、密码页),我只需填写用户文本框和密码文本框,然后单击登录按钮 我想发送此信息,但不必使用浏览器。我想“填充”文本框,但不必在浏览器中手动填充。可能正在使用Servlet 我的问题是:如何在文本框中发送信息,例如,从Servlet发送到网站?为什么不使用如下URL从Java调用 servlet将感觉值来自这些框 或者,您可能希望深入研究以模拟客户端发送的请求 嗯..哦。。你在做功能测试吗?为什么不调查一下呢 根据评论更新 您需要知道它基本上形成了

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

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


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

为什么不使用如下URL从Java调用

servlet将感觉值来自这些框

或者,您可能希望深入研究以模拟客户端发送的请求

嗯..哦。。你在做功能测试吗?为什么不调查一下呢


根据评论更新

您需要知道它基本上形成了一个由键值(KV)对组成的查询字符串

因此,如果您有一个名为
t字段
的文本字段,其中用户键入了
一些文本
,并且有一个名为
ddfield
的下拉列表,其中用户选择了
optionX
,其值为
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 ordered pair,用符号(&)分隔


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


希望这能有所帮助。

servlet负责处理另一端:它基本上是位于servlet容器中的http请求处理程序。如果我理解正确,您希望发送http请求。您可以使用诸如
curl
之类的命令行工具来实现这一点,或者如果您想留在java领域,您可以尝试一下。使用您喜爱的搜索引擎搜索更多示例,例如使用搜索词,如“通过url发送GET请求”

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


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

我不清楚你到底在干什么。我假设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>
//在您的servlet上
setAttibute('user','admin');
request.setAttribute('password','123');
getServletContext().getRequestDispatcher(“page.jsp”).forward(请求,响应);
//在jsp页面上,使用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
<span>${user}</span>    
//在您的servlet上
HttpSession session=request.getSession(true);
setAttribute('user','admin');
session.setAttribute('password','123');
getServletContext().getRequestDispatcher(“page.jsp”).forward(请求,响应);
//在jsp页面上,使用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
<span>${param.user}</span>
//在jsp或servlet上,您也可以在web应用程序中执行相同的操作
request.sendRedirect('http://example.com?user=admin&password=123');
//在您的jsp@example.com上
${param.user}

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

为了防止有人感兴趣,Firefox有一个名为Tamper data的插件。使用它,您可以停止和http请求的发送并对其进行修改。它将显示发送参数所需的“url”、参数当前的值及其名称。你可以去看看。之后,您可以使用
request.sendRedirect(“从篡改数据获得的url”)

请参见:好的,这是我的文本框,但是列表框呢?它的工作原理相同吗?还是有区别?@pictureyournews更新了答案。这是个好答案。