2011-05-09 168 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');