2011-05-09 165 views
10

如果我使用浏览器向服务器发送信息(例如使用登录,密码页面),我只需填写用户文本框和密码文本框并单击登录按钮即可。如何以编程方式发送带请求的HTTP请求?

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

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

+1

请参阅:http://stackoverflow.com/questions/2793150/how-to-use-java-net-urlconnection-to-fire-and-handle-http-requests – BalusC 2011-05-09 12:21:23

回答

7

为什么不干脆让使用URL像http://your.domain.name/your/servlet/path?userFieldName=THE_VALUE_YOU_WANT_TO_PASS&passwdFieldName=PASSWORD

这个servlet会觉得,值从那些箱子来到URL从Java调用。

或者您可能想要潜入Apache HTTP Client以模仿客户发送的请求。

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


更新为根据注释

你需要知道what actually form submission does?它基本上形成的键值(KV)对组成的查询字符串。

所以,如果你有一个文本字段命名tfield其中用户键入some text,并有向下命名下降,ddfield其中用户选择optionX具有价值optionX-Val。这种形式被提交给一个URL,http://my.domain.name/my/servlet - 浏览器会发送一个请求,这将看起来像

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

如果你想模仿表单提交,你必须手动创建具有请求字符串的URL含所有字段和它们的值作为FIELD_NAME = fieldValue方法有序对由符号(&)分离


啊,好主意。如果您使用Firebug(Firefox扩展),请在Firebug中打开NET面板,手动提交您想要模仿的表单。查看提交表单时发布的请求。它将具有您正在使用的确切的URL格式。复制此网址,替换值并尽可能多地提交虚假提交。

希望这会有所帮助。

+0

最可能解决方案 – 2011-05-09 07:27:59

+0

好的,这是万一我有文本框,但是怎么样的列表框?它的工作原理是否一样?还是有区别? – fernandohur 2011-05-09 16:47:59

+0

@pictureyournews更新了答案。 – Nishant 2011-05-09 18:14:04

1

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

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

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

1

我不清楚你真的想要什么。我假设这个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> 

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

0

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